我需要将JPEG Imagick图像转换为PNG,同时保持JPEG图像的imageCompressionQuality。我已经尝试使用compositeimage以及克隆$ 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.
有没有办法做到这一点?
答案 0 :(得分:2)
“质量”设置不是JPEG的一部分。它只是一些编码器用于选择量化表的简写。
PNG中没有等效的量化表选择。 PNG是无损压缩。所涉及的是所有设置的内容。
答案 1 :(得分:0)
找出一种方法使其工作 - 我使用writeImage将临时文件写入服务器,然后从temp对象创建一个新的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");