略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: Imagick::coalesceImages

2024-11-14

Imagick::coalesceImages

(PECL imagick 2, PECL imagick 3)

Imagick::coalesceImagesComposites a set of images

说明

public Imagick::coalesceImages(): Imagick

Composites a set of images while respecting any page offsets and disposal methods. GIF, MIFF, and MNG animation sequences typically start with an image background and each subsequent image varies in size and offset. Returns a new Imagick object where each image in the sequence is the same size as the first and composited with the next image in the sequence.

参数

此函数没有参数。

返回值

Returns a new Imagick object on success.

错误/异常

错误时抛出 ImagickException。

add a noteadd a note

User Contributed Notes 4 notes

up
10
ktr
9 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
3
vikomic at gmail dot com
11 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
1
Anony
6 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
-6
dikirill
9 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.

官方地址:https://www.php.net/manual/en/imagick.coalesceimages.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3