PHP 压缩 PNG 图片大小至 40KB-70KB,保持分辨率
可以使用 PHP 中的 GD 库来实现 PNG 图片大小的压缩,具体步骤如下:
- 使用 'imagecreatefrompng()' 函数创建一个 PNG 图片资源对象。
- 使用 'imagescale()' 函数将图片缩放到原来的分辨率。
- 使用 'imagepng()' 函数将压缩后的 PNG 图片保存到服务器上。
以下是示例代码:
// 读取原始 PNG 图片
$src = imagecreatefrompng('原始图片路径');
// 获取原始 PNG 图片的宽度和高度
$width = imagesx($src);
$height = imagesy($src);
// 设定压缩后的 PNG 图片的最大文件大小
$max_size = 70 * 1024;
// 设定 PNG 图片压缩质量
$quality = 9;
// 压缩 PNG 图片,直到文件大小在 40k 到 70k 之间
while (true) {
// 创建一个新的 PNG 图片资源对象
$dst = imagecreatetruecolor($width, $height);
// 将原始 PNG 图片缩放到新的 PNG 图片资源对象中
imagescale($dst, $width, $height);
// 将 PNG 图片保存到服务器上
ob_start();
imagepng($dst, null, $quality);
$image_data = ob_get_contents();
ob_end_clean();
file_put_contents('压缩后的图片路径', $image_data);
// 计算压缩后的 PNG 图片文件大小
$size = filesize('压缩后的图片路径');
// 如果文件大小小于 40k,增加压缩质量
if ($size < 40 * 1024) {
$quality += 1;
}
// 如果文件大小大于 70k,减少压缩质量
elseif ($size > $max_size) {
$quality -= 1;
}
// 如果文件大小在 40k 到 70k 之间,退出循环
else {
break;
}
// 如果压缩质量小于 0,退出循环
if ($quality < 0) {
break;
}
}
// 销毁 PNG 图片资源对象
imagedestroy($src);
imagedestroy($dst);
需要注意的是,PNG 图片的压缩质量和文件大小之间并不是线性关系,所以需要使用循环来不断调整压缩质量,直到文件大小在 40k 到 70k 之间。同时,压缩质量过高会导致图片失真,压缩质量过低会导致图片模糊,所以需要根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/nHrX 著作权归作者所有。请勿转载和采集!