我需要将JPEG Imagick图像转换为PNG,同时保持JPEG图像的图像压缩质量。为了实现这一点,我尝试使用合成图像和克隆$image,但两者都采用原始质量(在 JPEG 文件的图像压缩之前)。
$image = new Imagick($image_name);
$image->resizeImage($imageWidth, $imageHeight, Imagick::FILTER_LANCZOS, 1);
$image->setImageFormat("jpeg");
$image->setImageCompression(imagick::COMPRESSION_JPEG);
$image->setImageCompressionQuality(00);
$image->stripImage();
方法1:
$finalImage = new Imagick();
$finalImage->newImage($imageWidth, $imageHeight, "none");
$finalImage->compositeimage($image, Imagick::COMPOSITE_OVER, 0, 0);
$finalImage->setImageFormat("png");
echo $finalImage;
方法2:
$finalImage = clone $image;
etc.
有什么办法可以做到这一点吗?
-
"质量"设置不是 JPEG 的一部分。它只是一些编码器用于选择量化表的简写。
-
PNG 中没有等效的量化表选择。PNG 是一种无损压缩。进入的内容就是所有设置的结果。
想出一种方法来完成这项工作 - 我使用 writeImage 将临时文件写入服务器,然后从临时对象创建一个新的 Imagick 对象。这保留了 jpg 文件的压缩。
$image->writeImage($image_name . "temp.jpg");
$finalImage = new Imagick($image_name . "temp.jpg");
$finalImage->setImageFormat("png");
echo $finalImage;
unlink($image_name . "temp.jpg");