与imagick的播种动画导致蓝色背景

时间:2013-12-24 12:25:14

标签: php imagemagick imagick

我在ImageMagick 6.8.7-10 Q8 x86_64上编译了Ubuntu 13.04 64-bit。 我还为imagick 3.2.0RC1安装了PHP 5.5.7

我正在使用以下方法裁剪动画gif:

$imagick = new \Imagick('anim2.gif');

$imagick = $imagick->coalesceImages();

foreach ($imagick as $frame) {
    $frame->cropImage(80, 80, 0, 0);
    $frame->thumbnailImage(80, 80);
    $frame->setImagePage(80, 80, 0, 0);
}

$imagick = $imagick->deconstructImages();

$imagick->writeImages('test.gif', true);

这是原始图片:enter image description here

裁剪后的图片变为:enter image description here

请注意,裁剪后的图像会在第二帧中获得蓝色背景。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

问题在于coalesce引入了背景。这可能是也可能不是imagemagick中的错误。

如果从命令行运行,则需要在合并之前将背景设置为none:

convert anim2.gif -background none -coalesce temporary.gif

从PHP的imagick库中,您需要设置所有框架'背景为无:

$imagick = new \Imagick('anim2.gif');

foreach ($imagick as $frame) {
   $frame->setImageBackgroundColor('none'); //This is important!
}

$imagick = $imagick->coalesceImages();

foreach ($imagick as $frame) {
    $frame->cropImage(80, 80, 0, 0);
    $frame->thumbnailImage(80, 80);
    $frame->setImagePage(80, 80, 0, 0);
}

$imagick = $imagick->deconstructImages();

$imagick->writeImages('test.gif', true);

结果: enter image description here