想象一下JPEG到PNG的转换

时间:2014-11-19 01:05:41

标签: php png jpeg imagick

我需要将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.

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

  1. “质量”设置不是JPEG的一部分。它只是一些编码器用于选择量化表的简写。

  2. 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");