Imagick只为调整gif大小提供单个页面


Imagick only giving single page for gif resize

我看过不同的问题(比如这个或这个)和php文档。我已经检查了我的Imagick版本,Imagick::getVerison()函数返回

{"versionNumber":1641,"versionString":"ImageMagick 6.6.9-7 2014-03-06 Q16 http:'/'/www.imagemagick.org"}

所以我没有使用问题和文档中提到的错误版本(或者至少我不认为我是)。我正在使用以下代码尝试调整gif的大小。

public function resizeGif($path, $x, $y, $maintainRation = true) {
    $imageObject = new Imagick($path);
    $format = $imageObject->getImageFormat();
    if ($format != "GIF") {
        return false;
    }
    $imageObject = $imageObject->coalesceImages();
    $y = $this->getAspectRation($imageObject->getImageWidth(),
        $imageObject->getImageHeight(),
        $x);
    foreach ($imageObject as $frame) {
        $frame->thumbnailImage($x, $y);
        $frame->setImagePage($x, $y, 0, 0);
    }
    $newImageDir = 'img' . rand();
    $imageObject = $imageObject->deconstructImages(); 
    $imageObject->writeImages($newImageDir, true);
    $md5 = md5_file($newImageDir);
    return $md5;
}

但当我运行该函数时,gif会被创建并调整大小,但没有动画。这是我用测试的图像

它对我来说很好。可能你使用的是旧版本的Imagick,它有这个错误

如果是这样,您可以升级或使用解决它

file_put_contents('img' . rand().".gif", $imageObject->getImagesBlob());

顺便说一句,ImageMagick的6.6.9-7版本将于今年4月推出4年,可能也值得升级。