php实现等比例压缩图片

下面是详细的php实现等比例压缩图片的攻略。

一、确定图片尺寸

实现等比例压缩图片,第一步就是要确定要压缩到的尺寸。对于一个要压缩的图片,我们可以根据它的长和宽来计算它的比例。在压缩过程中,我们希望这个比例能够保持不变,这意味着长和宽都要进行按比例缩放。

我们可以通过下面的代码来计算图片在按比例缩放后的长和宽。

// $src_path:原始图片路径
// $max_width:目标宽度
// $max_height:目标高度
list($src_width, $src_height, $type) = getimagesize($src_path);

$ratio_orig = $src_width / $src_height;

if($max_width / $max_height > $ratio_orig) {
    $max_width = $max_height * $ratio_orig;
} else {
    $max_height = $max_width / $ratio_orig;
}

在上面的代码中,我们使用了PHP内置的getimagesize()函数获取了图片的长、宽、类型等信息,然后通过计算得到了按比例缩放后的长和宽。

二、生成缩略图

在得到了按比例缩放后的长和宽之后,我们就可以生成缩略图了。这个步骤需要使用PHP的GD图像处理库,我们可以通过下面的代码来实现。

// $src_path:原始图片路径
// $dst_path:目标图片路径
// $max_width:目标宽度
// $max_height:目标高度
$dst_image = imagecreatetruecolor($max_width, $max_height);
$src_image = null;

if($type == IMAGETYPE_JPEG) {
    $src_image = imagecreatefromjpeg($src_path);
} elseif($type == IMAGETYPE_PNG) {
    $src_image = imagecreatefrompng($src_path);
} elseif($type == IMAGETYPE_GIF) {
    $src_image = imagecreatefromgif($src_path);
}

imagecopyresampled(
    $dst_image,
    $src_image,
    0, 0, 0, 0,
    $max_width, $max_height,
    $src_width, $src_height
);

if($type == IMAGETYPE_JPEG) {
    imagejpeg($dst_image, $dst_path, 90);
} elseif($type == IMAGETYPE_PNG) {
    imagepng($dst_image, $dst_path);
} elseif($type == IMAGETYPE_GIF) {
    imagegif($dst_image, $dst_path);
}

在上面的代码中,我们使用了GD库中的imagecreatetruecolor()函数来创建一个新的缩略图,然后使用不同的图片类型对应的GD库函数来读取原始图片。最后,我们使用imagecopyresampled()函数将原始图片缩小并且按比例绘制到新的缩略图中,并保存到目标路径。

三、示例说明

下面我们来看两个具体的示例,分别压缩了jpg和png格式的图片。

示例一:压缩一张jpg图片

对于一张尺寸为600x900的jpg图片,我们希望将它压缩为宽度最大为400,高度最大为400的缩略图。实现代码如下:

$src_path = './example.jpg';
$dst_path = './example_thumb.jpg';
$max_width = 400;
$max_height = 400;

list($src_width, $src_height, $type) = getimagesize($src_path);

$ratio_orig = $src_width / $src_height;

if($max_width / $max_height > $ratio_orig) {
    $max_width = $max_height * $ratio_orig;
} else {
    $max_height = $max_width / $ratio_orig;
}

$dst_image = imagecreatetruecolor($max_width, $max_height);
$src_image = imagecreatefromjpeg($src_path);

imagecopyresampled(
    $dst_image,
    $src_image,
    0, 0, 0, 0,
    $max_width, $max_height,
    $src_width, $src_height
);

imagejpeg($dst_image, $dst_path, 90);

示例二:压缩一张png图片

对于一张尺寸为800x1200的png图片,我们希望将它压缩为宽度最大为600,高度最大为600的缩略图。实现代码如下:

$src_path = './example.png';
$dst_path = './example_thumb.png';
$max_width = 600;
$max_height = 600;

list($src_width, $src_height, $type) = getimagesize($src_path);

$ratio_orig = $src_width / $src_height;

if($max_width / $max_height > $ratio_orig) {
    $max_width = $max_height * $ratio_orig;
} else {
    $max_height = $max_width / $ratio_orig;
}

$dst_image = imagecreatetruecolor($max_width, $max_height);
$src_image = imagecreatefrompng($src_path);

imagecopyresampled(
    $dst_image,
    $src_image,
    0, 0, 0, 0,
    $max_width, $max_height,
    $src_width, $src_height
);

imagepng($dst_image, $dst_path);

这两个示例代码可以直接在php文件中运行,生成压缩后的图片。需要注意的是,这些代码在执行之前需要确保服务器上已经安装了GD图像处理库。如果没有安装,需要先通过包管理工具进行安装。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现等比例压缩图片 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 使命召唤12CPU到100解决办法

    以下是针对“使命召唤12CPU到100解决办法”的完整攻略: 问题描述 在玩使命召唤12时,有时候会发现游戏在运行时会导致CPU占用率飙升到100%,这会导致游戏运行缓慢,影响游戏体验。下面将提供几种解决办法。 解决办法 1. 关闭无关程序 在打开游戏之前,关闭所有不必要的后台程序,例如音乐播放器、浏览器等等,这些程序会占用一定的CPU资源,导致游戏运行卡顿…

    PHP 2023年5月27日
    00
  • thinkphp模板用法和内容输出实例

    下面为你详细讲解ThinkPHP模板用法和内容输出实例的完整攻略。 1. 什么是ThinkPHP模板? ThinkPHP模板是一种基于标签语法的模板引擎,它是ThinkPHP框架所自带的模板引擎,同时也是ThinkPHP中的重要组成部分之一。 使用ThinkPHP模板,能够使我们在项目开发中更加高效地实现模板数据的输出,让网站制作变得更加快速和便捷。 2. …

    PHP 2023年5月26日
    00
  • PHP小教程之实现链表

    PHP小教程之实现链表 什么是链表 链表是一种常见的线性结构,在计算机科学中有着广泛的应用。链表由若干个节点构成,每个节点都包含一个数据元素和一个指向下一个节点的引用。通俗的说,链表就像一条链子,链子上有很多环节,每个环节都有一些信息,同时也知道下一个环节在哪里。 链表的实现 链表可以使用 PHP 数组,但是我们也可以通过代码实现自己的链表类。下面是链表的核…

    PHP 2023年5月26日
    00
  • php截取html字符串及自动补全html标签的方法

    PHP截取HTML字符串方法 在PHP中,我们可以使用DOMDocument类来解析HTML文档,并且可以使用XPath查询语言来定位HTML元素。 下面是一个示例,演示如何使用DOMDocument类来截取HTML字符串: // 要截取的HTML字符串 $html = ‘<div class="content"> <h…

    PHP 2023年5月26日
    00
  • 在Global.asax文件里实现通用防SQL注入漏洞程序(适应于post/get请求)

    在Global.asax文件里实现通用防SQL注入漏洞程序是应对SQL注入攻击的常见做法之一。下面是实现步骤及示例说明: 步骤1:添加Global.asax文件 在网站的根目录下添加Global.asax文件,此文件作为全局应用程序类,可处理应用程序的所有事件。 步骤2:添加Application_BeginRequest事件处理程序 Global.asax…

    PHP 2023年5月30日
    00
  • php中一个完整表单处理实现代码

    下面是“PHP中一个完整表单处理实现代码”的完整攻略: 表单处理的基本流程 在PHP中,实现表单处理的基本流程如下: 创建HTML表单并设置form的method属性为POST,action属性为处理表单的URL地址。 在处理表单的PHP页面中利用$_POST数组获取表单提交的数据。 对获取的表单数据进行处理(如验证、过滤、存储等)。 根据处理结果,输出相应…

    PHP 2023年5月24日
    00
  • php学习之function的用法

    PHP学习之Function的用法 什么是Function Function是指一个封装代码块的结构,它可以接收零到多个参数并返回值,可以是内置的也可以是自定义的。在大型、复杂的项目中,使用Function可以使代码更加模块化,提高代码的可读性和可维护性。 Function的定义和调用 在PHP中,定义Function的语法如下: function func…

    PHP 2023年5月27日
    00
  • 微信小程序动态添加分享数据

    标题:如何动态添加微信小程序分享数据 在微信小程序中,我们可以通过使用JS-SDK和自定义转发来实现动态添加分享数据。下面将详细介绍如何实现这个功能。 步骤1:配置JS-SDK 在小程序入口页面的onLoad生命周期中,调用微信官方提供的wx.config方法配置JS-SDK。如下所示: wx.config({ debug: false, appId: ‘y…

    PHP 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部