ImageMagick:此图像格式没有解码委托`'@ error / construct.c / ReadImage / 504

问题描述 投票:17回答:7

问题:ImageMagick转换无法裁剪图像。看起来它无法识别图像类型?

我试过的:

我在网上搜索过,我看过几个类似的问题,但不是我的。我尝试过他们的解决方案,包括

  • 通过brew卸载并重新安装ImageMagick。
  • 识别 - 列表格式(JPEG,GIF,PNG,TIFF等都在那里,并且都具有rw权限)
  • convert -version(png是内置委托之一)
  • 转换pic1.png pic1-jpg.jpg(这很好)
  • 转换pic1-jpg.jpg pic1-jpg.jpg(这很好)
  • 转换pic1-jpg.jpg 805X972 + 34 + 94 pic1-jpg-crop.jpg(这给出了与png相同的错误,如下所示)

我正在使用Mac OSX El Capitan,终端中的其他一切工作正常。 ImageMagick已经安装好了。

当我跑:

$ convert /Users/Innovate/Desktop/crop/2015-04-26-GinaDate13_487.png 805X972+34+94 /Users/Innovate/Desktop/crop/2015-04-26-GinaDate13_487-cropped.png 

我明白了:

转换:无法打开图像`805X972 + 34 + 94':没有这样的文件或目录@ error / blob.c / OpenBlob / 2702。

convert:没有用于此图像格式的解码委托`'@ error / construct.c / ReadImage / 504。

没有解码委托给这个图像格式''@ error / construct.c / ReadImage / 504

在这个问题的其他帖子中,人们得到了

为此图像格式“PNG”转换无解码委托

或者类似(除了图像类型或文件名和图像类型)

但是,我对图像文件类型没有任何说明......

我还没有尝试卸载ImageMagick,然后从源手动安装它,因为我对此并不十分有信心......(此解决方案显示:https://stackoverflow.com/a/34633084/5398660

有谁知道可能会发生什么?

另外,任何人都可以帮我解释@ error / construct.c / ReadImage / 504部分吗?我正在查看constitute.c的代码,但我不确定我是否可以从中获取有用的信息来解决我的问题(我只知道一点C)

谢谢!

image bash macos imagemagick imagemagick-convert
7个回答
14
投票
brew remove imagemagick //to delete current version
brew install imagemagick --build-from-source

在mac上为我修好了


3
投票

投入我的两分钱,因为我过去几天也一直在努力解决这个问题。我在本地计算机上运行ImageMagick命令没有问题,但是当我从运行在Azure Cloud上的Tomcat服务器运行命令时,得到了OP提到的错误消息。

我可以通过运行以下命令来确定原因:

convert -list format

在我的本地计算机上,它将返回所有支持格式的相当长的列表,而在Kudu(Azure CLI工具)上,它将返回空结果。这表明ImageMagick没有找到处理所需的DLL文件的路径。

就我而言,问题只是由Azure上缺少配置引起的:

  • 系统环境变量%PATH%中缺少ImageMagick根文件夹
  • 没有环境变量“MAGICK_HOME”(设置为ImageMagick安装目录的根文件夹)
  • 没有环境变量“MAGICK_CODER_MODULE_PATH”(设置为上面提到的文件夹+ / modules / coders)

注意:对于在Azure上也遇到此问题的人,您可以查看this SO答案,该答案解释了如何使用XDT Transform添加环境变量。


2
投票

好吧,随着游戏,我找到了解决方案,我在这里发布给其他可能遇到这个问题的人:

显然,这不是/不再是我使用ImageMagick转换裁剪图像的方式。即使这个用法显示here它对我使用El Capitan不起作用(也许它是操作系统?)。

而不是使用

转换img.png 805X972 + 34 + 94 img-crop.png

正确的命令,有效的是:

转换image.png -crop 805X972 + 34 + 94 image-crop.png

也就是说,命令是:

转换image.ext -crop heightXwidth + positionX + positionY * imagecropped.ext

更多可以找到here。从ImageMagick页面上的描述我很困惑他们转换玫瑰的例子:-crop但你可以按照我上面提到的方式使用它并且它工作正常。


1
投票

我因错过一些单引号而收到同样的错误。

将图像与convert -draw与引号组合时,提供的图像必须用引号括起来。

没有这种图像格式的解码委托`'@ error / construct.c / ReadImage / 504

convert myBackground.png -font Arial -pointsize 20 \
  -draw "gravity west image Over 50,80,20,20 'myForeground.png'" \
  # -----------------------------------------^ added missing single quotes
  -flatten ./finalImage.jpg                  

当我在myForeground周围添加单引号时,问题就消失了。多么糟糕的错误!


0
投票

另一个Imagemagick命令是:

convert pic1-jpg.jpg[805x972+34+94] pic1-jpg-crop.jpg

或者如前所述

convert pic1-jpg.jpg -crop 805x972+34+94 +repage pic1-jpg-crop.jpg

请参阅https://www.imagemagick.org/script/command-line-processing.php的内联图像裁剪

一般来说,我更喜欢在宽度和高度之间使用x(小写)而不是X(大写),以便于阅读。但要么有效。


0
投票

我今天也不得不在应用不同颜色空间配置文件的转换操作中解决这个问题。

似乎imagick的convert命令对配置文件文件名的文件扩展名很敏感。在我的情况下,它是一个没有后缀的临时文件,触发了问题标题中的相同错误消息

convert infile.jpg -profile /tmp/profile-without-suffix outfile.jpg

将正确的后缀添加到配置文件名称可以解决问题:

(假设ICC格式)

convert infile.jpg -profile /tmp/profile-without-suffix.icc outfile.jpg

0
投票

对我来说(在Mac上使用Imagick和CraftCMS)我不得不用pecl uninstall imagickpecl install imagick重新安装Imagick(然后用sudo apachectl -k restart重新启动Apache)。我必须运行brew upgrade并得到一个更新版本的ImageMagick,这导致Imagick发现类似的NoDecodeDelegateForThisImageFormat 'JPEG' @ error/constitute.c/ReadImage/556错误。

© www.soinside.com 2019 - 2024. All rights reserved.