首页 > 解决方案 > Imagick 给出了错误的 gif 宽度和高度?

问题描述

我正在使用 Imagick 进行图像处理,但对于 1 个 gif 图像,我的 Imagick 给出了错误的宽度和高度。 这是那个图像

https://i.gifer.com/O7gC.gif

我的代码

$image = new \Imagick('O7gC.gif');
$image->getImageWidth();     // gives 1px
$image->getImageHeight();    // also gives 1px
$image->identifyImage();     // [geometry]['width'], and height is also 0

getimagesize() 提供正确的信息。

其他图像工作正常只是这个单一图像不工作?

和设置

$image->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN);

给出正确的宽度和高度,我无法理解这种行为,请解释一下?我正在使用 imagick

phpinfo 想象一下

Imagick compiled with ImageMagick version : ImageMagick 7.0.7-11 Q16 x64 2017-11-23 http://www.imagemagick.org

Imagick using ImageMagick library version : ImageMagick 7.0.7-11 Q16 x64 2017-11-23 http://www.imagemagick.org
ImageMagick release date : 2017-11-23

标签: phpimagemagickgdimagick

解决方案


内部图像堆栈迭代器指向最后读取的 GIF 帧。最后一07gC.gif帧是单个像素。当使用具有优化层的格式时,要么将内部迭代器重置为第一帧(在 GIF 中这将是最大的界限),要么合并所有帧(反转层优化)。

$image = new \Imagick('O7gC.gif');
$image->setFirstIterator();

.. 或者 ..

$image = new \Imagick('O7gC.gif');
$image = $image->coalesceImages();

推荐阅读