ImageMagick:ImageCoderSignatureMismatch `miff'

ImageMagick : ImageCoderSignatureMismatch `miff'

我已经更新了我的 ImageMagick 版本及其 PHP 的绑定。

我已经安装了ImageMagick-7.0.4-9-Q16-x64, 和 php_imagick-3.4.3-7.0-nts-vc14-x64, 运行 在 PHP 7.0.10.

命令行似乎运行良好,因为我成功地执行了一个简单的 magick convert image.png -resize 50% imageSmall.png

问题是 PHP 脚本在 ImageMagick 6 上 运行 成功 8.x (我记不太清了),但不能用这个版本。

它给了我以下错误:

ImageCoderSignatureMismatch `miff': 210 != 610 @ error/module.c/OpenModule/1342

有时显示 Unable to set the image format,我真的不知道为什么。

我发现在我的代码中哪里触发了这个错误:

public function init(){
    var_dump('begin init fcrender canvas');
    if($this->_canvas == null){
        $this->_canvas = new Imagick();
        /////// It's the following line :
        $this->_canvas->newImage($this->_width, $this->_height, 'transparent', 'miff');
        /////////////////////////////////
        $this->_filename = 'image';
        $this->_extension = 'png';
    }
}

那么为什么会出现这个错误呢?谢谢你的帮助! :)

这意味着加载了错误的模块。 210 != 610 是 miff 模块的版本签名,因此预期 IM 7 是 miff 610,但加载了 IM 6 的 210

有几个选项需要修复。

  • 卸载所有 ImageMagick 6 资源。
  • 将 ImageMagick 7 重新安装到一个独立的位置,并使用 $MAGICK_HOME 环境变量。
  • 定义 MAGICK_CODER_MODULE_PATH 环境变量以更正模块路径。

更多信息@Resources documentation

我认为 php_imagick 与 ImageMagick7.x.x 根本不兼容。

我下载并安装了我在这里找到的 ImageMagick6.9.3:http://windows.php.net/downloads/pecl/deps/

(要安装,我只是把C:\imagemagick\里的文件夹,把"bin\"里的内容放在top-level里,放在C:\imagemagick\里。 然后我复制了所有 CORE_RL_*.dll 到 C:\wamp64\bin\apache\apache2.4.23\bin\ .)

这在 PHP 7.0.10 中完美运行,imagick3.4.3 可在此处下载:https://pecl.php.net/package/imagick

谢谢大家的帮助!