Imagick JPEG 到 PNG 的转换


Imagick JPEG to PNG conversion

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

有什么办法可以做到这一点吗?

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

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