调整图像大小并保持质量?

Jas*_*onS 0 php image-optimization

我有调整图像大小的问题.

会发生的情况是,如果您上传的文件大于规定的参数,则会裁剪图像,然后以100%的质量保存.

所以,如果我上传一个272Kb的大型jpeg.图像被裁剪100个像素.然后文件大小上升到1.2Mb.

我们以100%的质量保存图像.我认为这是导致问题的原因.图像以30%的质量从Photoshop导出,从而减小了文件大小.以100%质量重新保存图像会创建相同的图像,但我假设有大量冗余文件数据.

有没有人遇到过这个?有没有人有办法解决吗?

这就是我们正在使用的.

$source_im = imagecreatefromjpeg ($file);
$dest_im = imagecreatetruecolor ($newsize_x, $newsize_y);
imagecopyresampled (
    $dest_im, $source_im,
    0, 0,
    $offset_x, $offset_y,
    $newsize_x, $newsize_y,
    $sourceWidth, $sourceHeight
);

imagedestroy ($source_im);
if ($greyscale) {
    $dest_im = $this->imageconvertgreyscale ($dest_im);
}
imagejpeg($dest_im, $save_to_file, $quality);
break;
Run Code Online (Sandbox Code Playgroud)

Nat*_*nes 5

正如您所说,保存在30%然后重新保存为100%将创建冗余数据,无论您裁剪,调整大小等等.

不幸的是,JPEG压缩会累积数据丢失,因此压缩30%,处理图像,然后重新压缩总是看起来比原始压缩更糟糕.经验法则是尽可能避免压缩(特别是30%的重压缩).所以上传100%(如有必要,或80%),然后压缩.

编辑:显然,只要图像大小遵循某些约束(通常宽度和高度为16像素的倍数),jpegtran(google it)就可以执行诸如裁剪之类的操作而无需先解压缩图像.我自己没试过,但它可能适合你的目的.