Мне нужно преобразовать изображение JPEG Imagick в PNG, сохраняя при этом imageCompressionQuality изображения 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.
Есть какой-либо способ сделать это?
Настройки "Качество" не являются частью 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");