php imagick不会保存PNG压缩但在浏览器中显示压缩

时间:2013-12-22 13:50:40

标签: php image compression png

我在PHP中有以下代码来获取PDF第一页的屏幕截图。

    $name = getcwd()."\\testfile";
    $img = new imagick();
    $img->setResolution(200,200);
    $img->readImage($name.'.pdf[0]');
    $img->setImageResolution(100,100);
    $img->resampleImage(100,100,imagick::FILTER_LANCZOS,1);
    $img->setImageCompression(\Imagick::COMPRESSION_ZIP );
    $img->setImageCompressionQuality('0');
    $img->setImageFormat('png8');
    $img->writeImage($name.".png");
    header("Content-type : image/png");
    echo $img;

此代码仅在Google Chrome的资源监视器标签中生成62kb的PNG。但是Imagick()写的图像高于114kb。为了确保图像不被压缩,或者我使用了名为TinyPNG的在线服务的任何其他问题,他们压缩图像缩小到62kb我进入浏览器......

这段代码可能有什么问题?我也使用PNG8格式,因为它更有效。

最佳

阿赫桑

1 个答案:

答案 0 :(得分:2)

我认为这是由writeImage语句引起的。如果您在不指定png8的情况下编写PNG图像:特别是在文件名中,您的图像将不会以该格式存储。实质上,setImageFormat只会在您将图像检索为字符串时生效(echo $ img)。

如果您执行以下操作:

$img->writeImage ('png8:' . $name . ".png");

它应该存储为png8。您可以使用标识-verbose并检查深度/通道深度来验证这一点。