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

时间:2016-06-02 14:03:07

标签: image bash macos imagemagick imagemagick-convert

问题: 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)

谢谢!

8 个答案:

答案 0 :(得分:3)

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

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

{{1}}

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

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

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

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

答案 1 :(得分:2)

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

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

而不是使用

  

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

正确的命令是:

  

convert image.png -crop 805X972 + 34 + 94 image-crop.png

即命令:

  

转换image.ext -crop height X width + positionX + positionY * imagecropped.ext

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

答案 2 :(得分:2)

我在 Ubuntu 20.04 和 ImageMagick 上遇到了同样的错误。 必须根据此说明重新安装带有所有附加组件的 ImageMagick:

#These are the steps required in order to Install ImageMagick with JPG, PNG and TIFF delegates.

sudo apt-get update 

#Install Build-Essential in order to configure and make the final Install

sudo apt-get install build-essential 

#libjpg62-dev required in order to work with basic JPG files

sudo apt-get install -y libjpeg62-dev 

#libtiff-dev is required in order to work with TIFF file format

sudo apt-get install -y libtiff-dev 

#Download ImageMagick

wget https://www.imagemagick.org/download/ImageMagick.tar.gz 

#Untar Imagemagick

tar xvzf ImageMagick.tar.gz 

#Access the working directory

cd ImageMagick/[version_number] 

#Configure and make sure to disable the "shared" option

./configure --disable-shared

#Make

sudo make

#Install

sudo make install

#Final Check

sudo make check

答案 3 :(得分: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周围添加单引号时,问题就消失了。多么糟糕的错误!

答案 4 :(得分:1)

使用 JPG、PNG 和 TIFF 委托安装 ImageMagick - Ubuntu (20.04)

方法一

很可能,如果您使用的是某种 Linux 版本,ImageMagick 已经安装在您的计算机上,如果您使用的是某种形式的 Windows,它可能没有安装。无论哪种情况,您都可以键入以下内容进行查找:

  1. 克隆源代码库:
git clone https://github.com/ImageMagick/ImageMagick.git ImageMagick-7.1.0    
  1. 接下来配置和编译 ImageMagick。请注意 pkg-config 脚本是必需的,以便 ImageMagick 可以在您的系统上找到某些可选的委托库。要配置,请键入:

    cd ImageMagick-7.1.0
    ./configure
    make
    
  2. 如果构建失败,请尝试使用 gmake。对于高级用户,我们建议构建模块:

    ./configure --with-modules
    
  3. 如果 ImageMagick 没有抱怨地配置和编译,你就可以在你的系统上安装它了。安装需要管理员权限。要安装,请键入

    sudo make install
    
  4. 您可能需要配置动态链接器运行时绑定:

    sudo ldconfig /usr/local/lib
    
  5. 最后,确认 ImageMagick 安装工作正常,输入

    /usr/local/bin/convert logo: logo.gif
    
  6. 要进行更全面的测试,请运行 ImageMagick 验证套件。 Ghostscript 和 Freetype 是先决条件,否则 EPS、PS、PDF 和文本注释测试将失败。

    make check
    

方法 2

点击以下链接

Install ImageMagick with JPG, PNG and TIFF Delegates - Ubuntu (20.04)

答案 5 :(得分: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(大写),以便于阅读。但要么有效。

答案 6 :(得分: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

答案 7 :(得分:0)

对我来说(在macos Mojave上,将Imagick与CraftCMS结合使用),我必须分别使用pecl uninstall imagickpecl install imagick重新安装Imagick(然后使用sudo apachectl -k restart重新启动Apache)。我必须运行brew upgrade并获得了较新版本的ImageMagick,这导致Imagick抛出了类似的错误NoDecodeDelegateForThisImageFormat 'JPEG' @ error/constitute.c/ReadImage/556