Мне нужно преобразовать изображение JPEG Imagick в формат PNG, сохраняя при этом качество сжатия изображения JPEG-изображения. Я пытался использовать составное изображение, а также клонирование $ изображения, чтобы добиться этого, но оба они берут оригинальное качество (до сжатия изображения в файле 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");