(PECL imagick 2, PECL imagick 3)

Imagick::coalesceImagesКомпонует набор изображений


public Imagick::coalesceImages(): Imagick

Скомпонованный набор изображений с соблюдением любых смещений страниц и методов удаления. Анимационные последовательности GIF, MIFF и MNG обычно начинаются с фона изображения, и каждое последующее изображение изменяется по размеру и смещению. Возвращает новый объект Imagick, где каждое изображение в последовательности имеет тот же размер, что и первое и скомпоновано со следующим изображением в последовательности.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает новый объект Imagick в случае успешного выполнения.


Функция выбрасывает исключение ImagickException, если возникла ошибка.

add a note

User Contributed Notes 4 notes

11 years ago
resize and/or crop an animated GIF

= new Imagick($file_src);

$image = $image->coalesceImages();

foreach (
$image as $frame) {
$frame->cropImage($crop_w, $crop_h, $crop_x, $crop_y);
$frame->thumbnailImage($size_w, $size_h);
$frame->setImagePage($size_w, $size_h, 0, 0);

$image = $image->deconstructImages();
$image->writeImages($file_dst, true);
8 years ago
If you wish to open an animated gif, don't ping the image with $imagick->pingImage(), you will get the same amount of frames you have in the gif, added to the start - but they're all black with stripes. So you have then double the amounts of frames the gif actually has.
vikomic at gmail dot com
13 years ago
Here goes an exaple how to resize GIF-s.

= new Imagick("original.gif");

$format = $imagick->getImageFormat();
if (
$format == 'GIF') {
$imagick = $imagick->coalesceImages();
do {
$imagick->resizeImage(120, 120, Imagick::FILTER_BOX, 1);
} while (
$imagick = $imagick->deconstructImages();
$imagick->writeImages('new_120x120.gif', true);

// can be added some more gifs
$imagick = $imagick->coalesceImages();
do {
$imagick->resizeImage(100, 100, Imagick::FILTER_BOX, 1);
} while (
$imagick = $imagick->deconstructImages();
$imagick->writeImages('new_100x100.gif', true);


You can use any resize method (resizeImage) with this example.

This example works fine with *imagick module version 2.2.1-dev*, but doesn't work correctly with *imagick module version 3.0.1*.
11 years ago
I tried examples below, and couldn't make them work. And found that version of my php-imagick extension is 3.1.0RC1, and looks like it's buggy in function "writeImages", downgrade to 3.0.1 helped me.
To Top