下面是详细的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技术站