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

Posted

技术标签:

【中文标题】ImageMagick:此图像格式没有解码委托 `\' @ error/constitute.c/ReadImage/504【英文标题】:ImageMagick: No decode delegate for this image format `' @ error/constitute.c/ReadImage/504ImageMagick:此图像格式没有解码委托 `' @ error/constitute.c/ReadImage/504 【发布时间】:2016-10-02 07:50:09 【问题描述】:

问题: ImageMagick convert 无法裁剪图像。好像无法识别图片类型?

我的尝试:

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

通过 brew 卸载并重新安装 ImageMagick。 identify -list 格式(JPEG、GIF、PNG、TIFF 等都在那里,并且都具有 rw 权限) convert -version (png 是内置委托之一) 转换 pic1.png pic1-jpg.jpg (效果很好) 转换 pic1-jpg.jpg pic1-jpg.jpg (效果很好) convert 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。

转换:此图像格式没有解码委托 `' @error/constitute.c/ReadImage/504。

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

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

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

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

 

但是,我的并没有说明图像文件类型...

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

有人知道会发生什么吗?

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

谢谢!

【问题讨论】:

我认为您在805X972+34+94 之前缺少命令运算符。 convert 实用程序将几何参数视为文件路径。 试试convert /Users/Innovate/Desktop/crop/2015-04-26-GinaDate13_487.png -crop 805X972+34+94 /Users/Innovate/Desktop/crop/2015-04-26-GinaDate13_487-cropped.png 哈哈,谢谢 emcconville,我刚刚发布了这个解决方案。我想知道它是否与此处发布的示例不同:apple.stackexchange.com/a/128000/156787 因为它是 El Capitan 您可以通过在裁剪坐标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 周围添加括号 [...] 或在裁剪坐标之前放置 -crop 来实现。 【参考方案1】:

好的,通过玩弄我找到了解决方案,我将其发布在这里以供可能遇到此问题的其他人使用:

显然,这不是/不再是/不是我使用 ImageMagick convert 裁剪图像的方法。尽管这种用法显示为here,但它对使用 El Capitan 的我不起作用(也许是操作系统?)。

而不是使用

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

正确的命令是:

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

 

也就是说,命令是:

convert image.ext -crop heightXwidth+positionX+positionY* imagecropped.ext

 

 

更多信息请关注here。 从 ImageMagick 页面上的描述中,我对他们有 convert rose: -crop 的示例感到困惑,但你可以按照我上面提到的方式使用它,它工作正常。

【讨论】:

如果您查看您在答案中链接到的示例,则 OP 在代码示例中错过了 -crop。如果您查看他的动画,您会发现它包含 -crop。 rose 是 Imagemagick 内置的用于测试的图像,因此可以用作rose: 谢谢 Bonzo,非常注重细节。我更新了我链接的示例(带有动画)以修复丢失的 -crop。感谢您解释什么是“玫瑰”。 很高兴你把它整理出来,只是不幸选择了一段糟糕的代码。一旦你掌握了 Imagemagick 的窍门,它就会变得非常简单。但它也可以执行非常复杂的命令。【参考方案2】:

由于缺少一些单引号,我收到了同样的错误。

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

此图像格式没有解码委托 `' @error/constitute.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 周围添加单引号时,问题消失了。多么糟糕的错误!

【讨论】:

【参考方案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 转换添加环境变量。

【讨论】:

【参考方案4】:
brew remove imagemagick //to delete current version
brew install imagemagick --build-from-source

在 mac 上为我修复了它

【讨论】:

部分我的原始回复:通过 brew 卸载并重新安装 ImageMagick。很抱歉没有明确输入命令,但我认为那会很清楚(显然不是)。我不希望其他人在卸载然后从源代码重建不起作用时感到沮丧。【参考方案5】:

另一个 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】:

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

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

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

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

(假设为ICC格式)

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

我在 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

【讨论】:

当我使用默认配置从源代码构建 ImageMagick-7.1.0-16 时,它安装到 /usr/local/bin/magick,这意味着我需要最终命令 /usr/local/bin/magick mogrify -format jpg *.heic【参考方案9】:

使用 JPG、PNG 和 TIFF 代表安装 ImageMagick - Ubuntu (20.04)

方法 1

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

    克隆源代码库:
git clone https://github.com/ImageMagick/ImageMagick.git ImageMagick-7.1.0    

    接下来配置和编译 ImageMagick。请注意 pkg-config 脚本是必需的,以便 ImageMagick 可以在您的系统上找到某些可选的委托库。要配置,请键入:

    cd ImageMagick-7.1.0
    ./configure
    make
    

    如果构建失败,请尝试使用 gmake。对于高级用户,我们建议构建模块:

    ./configure --with-modules
    

    如果 ImageMagick 的配置和编译没有任何问题,您就可以在系统上安装它了。安装需要管理员权限。要安装,请键入

    sudo make install
    

    您可能需要配置动态链接器运行时绑定:

    sudo ldconfig /usr/local/lib
    

    最后,验证 ImageMagick 安装是否正常,输入

    /usr/local/bin/convert logo: logo.gif
    

    要进行更全面的测试,请运行 ImageMagick 验证套件。 Ghostscript 和 Freetype 是先决条件,否则 EPS、PS、PDF 和文本注释测试会失败。

    make check
    

方法 2

点击以下链接

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

【讨论】:

以上是关于ImageMagick:此图像格式没有解码委托 `' @ error/constitute.c/ReadImage/504的主要内容,如果未能解决你的问题,请参考以下文章

来自 Imagick 的 readImageBlob 函数抛出一个错误,如“无此图像格式的解码委托”

ImageMagick:沿一个轴非线性拉伸图像

ImageMagick:将图像转换为 A4 页面大小的 PDF,图像适合页面

使用 imagemagick 组合图块以创建图像

ImageMagick 无法在 WSL 上将 PDF 转换为图像

ImageMagick PDF 委托失败,GhostScript 丢失