Преобразование JPEG в PNG

Мне нужно преобразовать изображение 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.

Есть какой-либо способ сделать это?

0

Решение

  1. Настройки «Качество» не являются частью JPEG. Это просто сокращение, которое некоторые кодеры используют для выбора таблиц квантования.

  2. В PNG нет эквивалента для выбора таблицы квантования. PNG — сжатие без потерь. Что входит в это то, что выходит для всех настроек.

2

Другие решения

Выяснил, как это сделать — я использовал 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");
0

По вопросам рекламы [email protected]