可以使用 PHP 中的 GD 库来实现 PNG 图片大小的压缩,具体步骤如下:

  1. 使用 'imagecreatefrompng()' 函数创建一个 PNG 图片资源对象。
  2. 使用 'imagescale()' 函数将图片缩放到原来的分辨率。
  3. 使用 '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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录