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

Mon*_*tag 25 macos bash image 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 
Run Code Online (Sandbox Code Playgroud)

我明白了:

转换:无法打开图像`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)我可以得到有用的信息

谢谢!

小智 14

brew remove imagemagick //to delete current version
brew install imagemagick --build-from-source
Run Code Online (Sandbox Code Playgroud)

在mac上为我修好了

  • 我的原始回复的一部分:通过brew卸载并重新安装ImageMagick。抱歉,没有明确放置命令,但是我认为这很清楚(显然不是)。我不希望其他人在卸载然后从源代码进行重建时感到沮丧。 (2认同)

小智 10

我在 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
Run Code Online (Sandbox Code Playgroud)


SND*_*SND 5

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

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

convert -list format
Run Code Online (Sandbox Code Playgroud)

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

就我而言,问题只是由于 Azure 上缺少配置造成的:

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

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


Mon*_*tag 4

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

显然,这不是/不再是/不适合我使用 ImageMagick 转换来裁剪图像的方法。尽管这里显示了这种用法,但它对我使用 El Capitan 不起作用(也许是操作系统?)。

而不是使用

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

有效的正确命令是:

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

 

也就是说,命令是:

转换 image.ext -crop高度X宽度+ positionX +positionY* imagecropped.ext

 

 

可以在这里找到更多内容。从 ImageMagick 页面上的描述来看,我对他们转换 Rose: -crop 的示例感到困惑,但你可以按照我上面提到的方式使用它,它工作得很好。

  • 如果您查看答案中链接的示例,那么OP在代码示例中错过了 -crop 。如果你看他的动画,你会发现它包含 -crop。rose是Imagemagick内置的用于测试的图像,因此可以用作rose: (2认同)