我在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);
这是原始图片:
裁剪后的图片变为:
请注意,裁剪后的图像会在第二帧中获得蓝色背景。
为什么会这样?
答案 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);
结果: