ImageMagick无法解码代理

74

我正在尝试使用Imagemagick将一张图片进行转换,但是出现了以下错误:

convert: no decode delegate for this image format `//i.imgur.com/nTheJ.jpg' @ error/constitute.c/ReadImage/532.

我正在执行以下操作:

convert http://i.imgur.com/nTheJ.jpg -resize 600×600 filarkiv/billeder/produkter/s236-085145.jpg

我有以下委托:

DELEGATES freetype jpeg jng mpeg png x11 xml zlib

有人知道问题在哪里吗?


好的,你有JPEG委托程序,它显示出了问题。这引出了一个问题,源文件出了什么问题?或者是JPEG安装的问题。 - Orbling
请问您使用的是哪个操作系统,以及ImageMagick的哪个版本? - florisla
你的policy.xml文件可能限制了你对HTTP的使用。编辑你的policy.xml文件,为HTTP授予读取权限。 - fmw42
13个回答

80

在使用Rails中的DragonFly渲染图像时,我遇到了这个错误。这是在我升级到Lion之后发生的(ImageMagick是使用Brew安装的)。

我重新安装了ImageMagick、jpeg、libtiff和jasper(仅仅重新安装ImageMagick是不够的)。

brew uninstall imagemagick jpeg libtiff jasper
brew install imagemagick

在此之前,运行

identify -list format

而jpeg不在列表中。重新安装上述包后,jpeg出现在列表中。


2
在我的情况下,缺少了libpng - 我使用MacPorts安装了它,这触发了ImageMagick的重建。 - Jasper Blues
我从来没能让Imagemagick找到TIF文件,所以我使用了GraphicsMagick。那个好用。 - Sukima
1
同样的情况。重新安装ImageMagick还不够,必须指定JPEG。 - Rob Sobers
3
非常棒的回答,喜欢“identify -list format”这个功能,这样我就可以看到缺少了什么。谢谢! - Will

26

对于我来说:

 brew reinstall imagemagick --with-libtiff

在处理tiff文件时,这个方法成功解决了一样的问题,挽救了当时的情况。

更新:一年后,这仍然是我在MacOS X上正确使用转换功能的唯一方法。


以这种方式安装对我来说非常关键,才能使TIFF文件正常工作。普通的ImageMagick安装无法正常工作。 - nfriend21
你可以使用 brew info imagemagick 命令查看如何使用 brew 重新安装 imagemagick 并设置其他选项。非常有用。 - Jeremy S.
2
Warning: imagemagick: this formula has no --with-libtiff option so it will be ignored! - Dorian

17

-resize 600×600中的×替换为大写字母X,就可以正常工作。

-resize 600X600

1
无法运行:ERROR ArgumentError:未识别几何字符串100X100。 - Jonathon Horsman
这太奇怪了。在我开始转换 blob 类型文件之前,使用小写字母“x”一切正常。我按照你说的做了,一切又恢复正常了。 - wle8300

6
在Ubuntu 16上,我首先需要安装以下内容(这不是一台开发机而是一台服务器):
sudo apt-get install autoconf automake autotools-dev libtool pkg-config 

然后启用PNG和JPG代理:

sudo apt-get install libpng12 libpng12-dev libjpeg libjpeg-dev

紧随其后

./configure

现在应该显示代表已启用

然后进行重建 (make clean && make 然后 sudo make install)


4

我曾经遇到过类似的问题。我缺少了JPEG、PNG的委托:

apt install libjpeg-dev
apt install libpng-dev

cd ImageMagick-7.1.0-19/
./configure

现在检查输出是jpeg=yes;png=yes

make
sudo make install

现在尝试使用 convertmogrify
mogrify -path "output/" -resize 1920X1920 some.jpeg

非常感谢!你为我节省了许多搜寻的时间! - Andrey

3

redhat4.8,如果你是通过源码安装,可以尝试以下步骤:

yum remove libjpeg

wget http://www.imagemagick.org/download/delegates/jpegsrc.v9a.tar.gz

sudo tar xvf jpegsrc.v9a.tar.gz -C /usr/local/src/

cd /usr/local/src/jpeg-9a

./configure --enable-shared

make

sudo make install

之后安装ImageMagick:

cd ImageMagick-6.9.6-4

./configure

sudo make install

sudo ldconfig /usr/local/lib


3

我最近也遇到了同样的问题。在谷歌上搜索了几个小时后,我发现问题出在php扩展Gmagick和Imagick之间的冲突上。将php.ini文件中的gmagick.so注释掉就解决了这个问题。希望这能为他人节省时间 :)


2

来自网络上的Phillip Ingram:

在gentoo中使用:

sudo EXTRA_ECONF="--with-png --with-jpeg" emerge imagemagick

这与Jonathan Horseman的答案稍有不同,因为它不是一个错误,而是需要在安装过程中进行更多的指定。

但是,identify命令非常有用。

希望这对某些人有所帮助(也许是我将来的自己;)。


这似乎不是有效的语法(至少存在不平衡的引号),因此不清楚在这里的意图是什么,但如果有帮助的话会很好。 - TTT
@TTT 只需删除末尾的引号即可。 - Shidouuu
希望那只是额外的引号粘贴错误,而不是缺少某些内容的复制粘贴错误。已修复。 - Gerard ONeill

2
在我的情况下,解决方案是在命令结尾处使用*.{jpg,png}而不是*。我相信*会捕获/尝试转换隐藏文件。

1
你是个行家 - 我的mogrify脚本一直失败,因为它没有“针对此图像格式DB进行解码的委托”。过了一会儿我意识到它试图转换目录,因为我在命令的末尾留下了*而没有指定文件名。 - AutoBaker

2

出现此错误的另一个原因是您尝试转换的文件没有扩展名。

例如,在使用默认配置的multer的Node.js应用程序中可能会发生这种情况。


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