PHP 8.3.4 Released!

Imagick::coalesceImages

(PECL imagick 2, PECL imagick 3)

Imagick::coalesceImagesCompose un jeu d'images

Description

public Imagick::coalesceImages(): Imagick

Compose un jeu d'image en respectant toutes les positions et les méthodes de dispositions. Les séquences d'animations GIF, MIFF, et MNG, commencent typiquement par une image une fond, puis toutes les images suivantes varient en taille et position. Retourne un nouvel objet Imagick où chaque image de la séquence est de la même taille que la première, et composée avec la suivante dans la séquence.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne un nouvel objet Imagick en cas de succès.

Erreurs / Exceptions

Lance une exception ImagickException si une erreur survient.

add a note

User Contributed Notes 4 notes

up
6
ktr
11 years ago
resize and/or crop an animated GIF

<?php
$image
= 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);
?>
up
1
Anony
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.
up
2
vikomic at gmail dot com
12 years ago
Here goes an exaple how to resize GIF-s.

<?php
$imagick
= new Imagick("original.gif");

$format = $imagick->getImageFormat();
if (
$format == 'GIF') {
$imagick = $imagick->coalesceImages();
do {
$imagick->resizeImage(120, 120, Imagick::FILTER_BOX, 1);
} while (
$imagick->nextImage());
$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->nextImage());
$imagick = $imagick->deconstructImages();
$imagick->writeImages('new_100x100.gif', true);
}

$imagick->clear();
$imagick->destroy();
?>

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*.
up
-7
dikirill
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