📅  最后修改于: 2023-12-03 15:03:40.478000             🧑  作者: Mango
在图像处理中,一个常见的需求是要对图像进行调整大小(也称为缩放)。PHP 提供了 imagecopyresampled()
函数来实现这个过程。但是,这个函数有时需要使用大量的内存和 CPU 时间,如果你需要多次调整图像大小,那么就需要考虑一些其他的方法。这时就可以考虑使用自己编写的 resampleImage()
函数。
resampleImage()
函数可以用于对一个图像进行缩放操作,支持以下功能:
resampleImage()
函数的使用方法如下:
$resized_image = resampleImage($source_image, $new_width, $new_height, $format, $quality, $filter);
其中,参数说明如下:
$source_image
:要缩放的原始图像资源(必选)$new_width
:缩放后的图像宽度(必选)$new_height
:缩放后的图像高度(必选)$format
:输出格式,可以为 "jpg"、"png"、"gif" 等(可选,默认为 "jpg")$quality
:输出质量,一般范围为 0-100(可选,默认为 75)$filter
:缩放算法,可以为 IMG_FILTER_POINT、IMG_FILTER_BILINEAR、IMG_FILTER_GAUSSIAN_BLUR 等(可选,默认为 IMG_FILTER_BILINEAR)下面是一个示例代码,用于将一个图像缩放到指定的大小。在本例中,缩放算法为 IMG_FILTER_BILINEAR,输出格式为 JPEG,输出质量为 90。
// 要缩放的原始图像资源
$source_image = imagecreatefromjpeg('source_image.jpg');
// 缩放后的图像宽度和高度
$new_width = 640;
$new_height = 480;
// 输出格式,可以为 "jpg"、"png"、"gif" 等
$format = "jpg";
// 输出质量,一般范围为 0-100
$quality = 90;
// 缩放算法,可以为 IMG_FILTER_POINT、IMG_FILTER_BILINEAR、IMG_FILTER_GAUSSIAN_BLUR 等
$filter = IMG_FILTER_BILINEAR;
// 执行缩放操作,返回缩放后的图像资源
$resized_image = resampleImage($source_image, $new_width, $new_height, $format, $quality, $filter);
// 输出缩放后的图像到文件中
if ($format == "png") {
imagepng($resized_image, 'resized_image.png', $quality);
} else if ($format == "gif") {
imagegif($resized_image, 'resized_image.gif');
} else {
imagejpeg($resized_image, 'resized_image.jpg', $quality);
}
下面是 resampleImage()
函数的代码实现:
function resampleImage($source_image, $new_width, $new_height, $format = "jpg", $quality = 75, $filter = IMG_FILTER_BILINEAR) {
// 获取原始图像的宽度和高度
$source_width = imagesx($source_image);
$source_height = imagesy($source_image);
// 计算缩放后的图像宽度和高度
if ($new_width == 0 && $new_height == 0) {
// 如果新宽度和新高度都为0,则使用原始图像的大小
$new_width = $source_width;
$new_height = $source_height;
} else if ($new_width == 0) {
// 如果只设置了新宽度,则按比例计算新高度
$new_width = $new_height * $source_width / $source_height;
} else if ($new_height == 0) {
// 如果只设置了新高度,则按比例计算新宽度
$new_height = $new_width * $source_height / $source_width;
}
// 创建一张新的图像资源
$target_image = imagecreatetruecolor($new_width, $new_height);
// 对图像进行缩放操作
imagecopyresampled($target_image, $source_image, 0, 0, 0, 0, $new_width, $new_height, $source_width, $source_height);
// 根据输出格式输出缩放后的图像
switch ($format) {
case "gif":
// 输出为 GIF 格式
$result = $target_image;
break;
case "png":
// 输出为 PNG 格式
$result = $target_image;
imagesavealpha($result, true);
break;
default:
// 输出为 JPEG 格式
$result = $target_image;
imagefilter($result, $filter);
break;
}
return $result;
}
resampleImage()
函数能够有效地缩小图像,减小内存和 CPU 时间的开销。在实际生产中,如果需要对图像频繁地进行缩放处理,使用 resampleImage()
函数会是一个不错的选择。但是,在使用过程中需要根据实际需求,结合缩放算法、输出格式和输出质量等因素进行调整,以达到最佳的效果。