gd — конвертирует JPEG в прогрессивный JPEG с переполнением стека

Я пытаюсь повторно сохранить уже созданный JPEG как прогрессирующий JPG.

По сути, на внешнем интерфейсе у меня есть JS, который обрезает изображение и выводит изображение в формате base64 JPEG. Как только он передается в скрипт PHP, я создаю его как обычный файл JPEG, например так:

$largeTEMP = explode(',', $_POST['large']);
$large = base64_decode($largeTEMP[1]);
file_put_contents('../../images/shows/'.$dirName.'/large.jpg', $large);

Я хочу, чтобы это изображение JPG было прогрессивным, поэтому я осмотрелся и нашел функцию PHP imageinterlace; Однако я не могу заставить его работать. Я пробовал разные комбинации, но чувствую, что по какой-то причине я поступаю неправильно.

Поэтому мой вопрос: как я могу взять уже сгенерированный JPEG и преобразовать его в прогрессивный, используя PHP? Или, что еще лучше, преобразуйте его в прогрессивный JPEG, прежде чем я даже сохраню его.

1

Решение

Создать ресурс изображения с imagecreatefromstring:

$data = base64_decode($data);
$im = imagecreatefromstring($data);
if ($im === false) {
die("imagecreatefromstring failed");
}
imageinterlace($im, true);
imagejpeg($im, 'new.jpg');
imagedestroy($im);
4

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

Попробуйте Imagick (пакет ImageMagic), как показано здесь: http://php.net/manual/en/imagick.setinterlacescheme.php

$image = new Imagick('image.jpg');

$image->thumbnailImage(500, 0);

$image->setInterlaceScheme(Imagick::INTERLACE_PLANE);

$image->writeImage('progressive.jpg');
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector