Задать вопрос
Palych_tw
@Palych_tw
Типа веб-разработчик

Как уменьшить размер файла Imagick?

Делаю обработку изображений, разделяю на кусочки. После всех манипуляций размер файла изображения в разы больше, чем исходный.
$pieces = 2; // или 3
$picture = new Imagick('./test.jpg');
$picture_width = $picture->getImageWidth();
$picture_height = $picture->getImageHeight();
$gap = 20;
$piece_width = intval($picture_width / $pieces);

$canvas = new Imagick();
$canvas->newImage($picture_width + $gap * ($pieces - 1), $picture_height, 'none');
$picture->cropImage($piece_width, $picture_height, 0, 0);
$canvas->compositeImage($picture, Imagick::COMPOSITE_ADD, 0, 0 );

for ($i = 1; $i < $pieces; $i++) {
    $piece = new Imagick('./test.jpg');
    $piece->cropImage($piece_width, $picture_height, $piece_width * $i, 0);
    $canvas->compositeImage($piece, Imagick::COMPOSITE_ADD, $gap * $i + $piece_width * $i, 0 );
}

$canvas->setImageFormat('png');

header("Content-Type: image/png");
echo $canvas;
die;


Исходное изображение - 393KB
605359197bba2455540669.jpeg

Результаты по 1.5MB!
6053599139c4c853143021.png

605359b20a5d1657441491.png
  • Вопрос задан
  • 447 просмотров
Подписаться 1 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 2
Fernus
@Fernus
Техник - Механик :)
https://www.php.net/manual/ru/imagick.setimagecomp...
https://www.php.net/manual/ru/imagick.setcompressi...

UPD:
Попробуй значение в 75...сильно не должно повлиять на качество изображения...

UPD2:
PNG не увидел сначала...

For a PNG image, `setImageCompressionQuality()` is not work at all, length of the generated files are totally same.

But I found an effective way, that is use `setOption('png:compression-level', 9)`, the value range is 0-9.

Источник
Ответ написан
@neol
Так оригинал у вас в jpeg, а результат в png.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы