PHP Imagick读图像写图像质量不同

PHP Imagick读图像写图像质量不同,php,imagick,Php,Imagick,我正在用php imagick缩放图像。我要缩放的图像是没有exif数据的jpg(1600x1200+0+0 8位sRGB)。缩放图像的质量低于原始图像。所谓质量,我的意思是图像有更多的瑕疵(可见质量)。因此,我做了一个测试,我只需读取一个图像并将其写入另一个文件名,而不改变任何其他内容: $im = new Imagick(); $im->readImage(realpath('./a.jpg')); // image quality checked with $im->getIm

我正在用php imagick缩放图像。我要缩放的图像是没有exif数据的jpg(1600x1200+0+0 8位sRGB)。缩放图像的质量低于原始图像。所谓质量,我的意思是图像有更多的瑕疵(可见质量)。因此,我做了一个测试,我只需读取一个图像并将其写入另一个文件名,而不改变任何其他内容:

$im = new Imagick();
$im->readImage(realpath('./a.jpg')); // image quality checked with $im->getImageCompressionQuality() 50
$im->writeImage('./b.jpg'); // image quality checked with $im->getImageCompressionQuality() 50
结果是:

  • 图像a.jpg>254kb(原始图像)
  • 图像b.jpg>183kb
因此,只要将图像写入一个新文件,PHPImagick就会改变一些我不想要的东西。 谁能向我解释一下:

  • 生成的图像会发生什么变化
  • 如何在不改变除缩放以外的任何其他内容的情况下写入图像

谢谢

我的猜测是默认的JPEG压缩质量比您预期的要低,如果您压缩压缩的数据,它可以(而且大部分会)变得更大。同样适用于非无损图像压缩。质量每况愈下。可以为writeImage()添加质量参数。选择一个更好的。正如我在示例代码中所写的:我不改变压缩,也不改变质量。我只是直接读写图像。那么,这是否意味着在编写图像时会使用默认压缩?根据我的经验,通常是这样。原始质量设置仅适用于第一次压缩。后续的重新压缩将使用重新合成的图像,这是使用有损压缩进行处理的挑战。我建议您保存不同质量的高质量图像,比如100、90、80质量的图像,然后在PHP脚本中运行它,尝试使用上面提到的两个函数,并尝试从重新处理的输出中找到一个良好的平衡。