ImageMagick没有解码此图像格式的代理。

9

我在Windows和WAMP服务器下工作。

这是我的PHP代码,使用了Imagick。

$imagick = new Imagick($_SERVER['DOCUMENT_ROOT'] . '/' . $this->_name);

$_SERVER['DOCUMENT_ROOT'].'/'.$this->_name 显示时:

D:/Sources/my_project/public/media/2/9/1/05201502/55450e1b6543a05201502_9.PNG

我检查了该文件夹中的图像,它确实存在。

但是Imagick抛出了一个异常:

Uncaught exception 'ImagickException' with message 'no decode delegate for this image format `D:/Sources/my_project/public/media/2/9/1/05201502/55450b10d8ea705201502_9.PNG' @ error/constitute.c/ReadImage/555' in D:\Sources\my_project\library\project\Image.php on line 225

我寻找了解决方法,但没有找到,我该怎么办?谢谢

更新:在命令行中键入convert -version时,这是结果:

  Version: ImageMagick 6.8.8-4 Q16 x86 2014-01-29 http://www.imagemagick.org
  Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
  Features: DPC Modules OpenMP
  Delegates: bzlib cairo freetype jbig jng jp2 jpeg lcms lqr pangocairo \
             png ps rsv g tiff webp xml zlib

更新

这是imagick的phpinfo。

支持的ImageMagick格式数量:0
支持的ImageMagick格式:无


1
请添加 phpinfo() ImageMagick 支持的图像格式。 此外,请确保文件可被 PHP 通过 readfile() 或类似函数读取。 - Kalle Volkov
1
@KalleVolkov,感谢您的建议,我已经更新了 ;) - SmootQ
3个回答

7
似乎你的ImageMagick PHP模块不支持任何图像格式。
尝试查找其他ImageMagick安装程序或从头开始安装PHP。
此外,似乎已经有一个关于此问题的问题/答案在SO上。

1
尽管我没有完全解决我的问题,但你的答案对我有很大帮助,我觉得现在离找到解决方案更近了。我想问题出在 MOD_xxx.dll 文件上,Apache 在 /bin 文件夹中查找它们,而我将它们放在了 imagick 文件夹中... 无论如何,非常感谢 :),我已经为此苦苦挣扎了两个多星期。 - SmootQ

6

你应该运行

convert -version

并报告输出结果。在我的系统上,它是

Version: ImageMagick 6.9.0-0 Q16 x86_64 2014-12-06 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules
Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib gvc jbig \
                      jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png ps \
                      rsvg tiff webp wmf x xml zlib

您的输出是否包含png作为内置的'代理'之一?
如果不包含,请更新您的安装或从当前源代码构建。

谢谢你的回答,+1,这是我的输出C:\Users\TAQI>convert -version 版本:ImageMagick 6.8.8-4 Q16 x86 2014-01-29 http://www.imagemagick.org 版权所有:Copyright (C) 1999-2014 ImageMagick Studio LLC 特性:DPC 模块 OpenMP 委托人:bzlib cairo freetype jbig jng jp2 jpeg lcms lqr pangocairo png ps rsvg tiff webp xml zlib - SmootQ
1
正如您所看到的,它包含png和jpeg格式的图片,请注意问题不仅限于png图像,也适用于jpeg图像。 - SmootQ
1
@SmootQ:请在您的原始问题中更新您的评论内容。将这些信息隐藏在页面下方的评论中没有太大用处... - Kurt Pfeifle

4

最终我找到了解决方案来安装我的windows openserver/nginx/php-fpm:

  1. http://windows.php.net/downloads/pecl/releases/imagick/下载适用于您的PHP版本的最新php_imagick发行版(例如:php_imagick-3.4.3-7.1-ts-vc14-x64.zip)。
  2. 仅从此存档中提取php_imagick.dll到您的“php/ext”文件夹中。
  3. 运行phpinfo()并检查第"Imagick compiled with ImageMagick version"行的值 (我的是:"ImageMagick 6.9.3-7 Q16 x64...")。
  4. 现在转到http://windows.php.net/downloads/pecl/deps/并下载正确的Imagick-*.zip文件版本(我的是:ImageMagick-6.9.3-7-vc14-x64.zip)。
  5. 提取此存档并将所有*.dll文件从“/bin”文件夹复制到您的“php/ext”文件夹中(约145个文件)。
  6. 重新启动服务器并检查phpinfo()。ImageMagick现在支持大约230多种格式。

有时phpinfo()会显示imagick支持所有格式,但php脚本不响应-在这种情况下,再次检查您是否为安装下载了正确的Imagick-*.zip版本。(ts/nts, VC11/VC14, x64/x86)


非常感谢您的回答,我发表这个问题已经两年了,感谢您抽出时间来回答,肯定还有很多其他人需要尽可能多的答案。+1 - SmootQ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接