Как изменить размер анимации GIF средствами PHP и IMAGICK? На многих форумах Рунета задают подобные вопросы. Но ответа на них нет почти нигде. Много предложений, поступает от более продвинутых в PHP пользователей, как можно изменить размер анимации GIF. Но в основном - это не уверенные советы "наверно так...", "может так? ..." и тому подобные. Еще предлагаются найденные в сети длинные php-коды, с кучей лишних функций и примочек, которые работают не корректно или не работают вовсе.

На самом деле все гораздо проще!

Итак, приступим непосредственно к ответу на вопрос: "как изменить размер анимации GIF средствами PHP и IMAGICK?". Объект IMAGICK, содержащий анимацию, представляет собой массив, значения которого содержат по одному кадру. Для того чтобы изменить анимированный GIF средствами PHP и IMAGICK, нужно просто перебрать в цикле объект IMAGICK, и изменить размер каждого кадра. Удобнее всего это делать в цикле "foreach".

Вот простой пример скрипта, который создает превьюшку (с кадрированием лишних краев) и выводит ее в браузер:


// максимальная ширина кадра
$max_animation_width = 128;

// максимальная высота кадра
$max_animation_height = 128;

// создаем объект из существующей анимации GIF
$animation_source = new Imagick('animation.gif');

// узнаем формат анимации
$animation_format = $animation_source->getImageFormat();

// в цикле перебираем объект по кадрам
foreach($animation_source as $imagick_frame)
{
	// меняем размер текущего кадра с обрезанием краев
	$imagick_frame->cropThumbnailImage($max_animation_width, $max_animation_height);
}	//end foreach($animation_source as $imagick_frame)

// отправляем заголовок
header('Content-Type: image/'.$animation_format);

// выводим измененную анимацию
echo $animation_source->getImagesBlob();

// удаляем объект, чтобы не засорять буфер
$animation_source->destroy();

Вот такой маленький php-скрипт легко меняет размер анимации GIF.

Конечно, IMAGICK располагает огромным количеством разных функций и фильтров, с помощью, которых можно сделать с анимацией практически все, что душе угодно, но это уже "другая история".

Комментарии

captcha
 20 апр. 2014 Ответить

If my problem was a Death Star, this article is a photon torpedo.