问题:图像魔术转换无法裁剪图像。看起来它无法识别图像类型?
我尝试过什么:
我在网上搜索了一下,我看到了几个类似的问题,但没有我的。 我已经尝试了他们的解决方案,包括
- 通过brew卸载并重新安装ImageMagick。
- 识别列表格式(JPEG,GIF,PNG,TIFF 等都在那里,并且都有 RW 权限)
- 转换版本(PNG 是内置委托之一)
- 转换图片1.png图片1-JPG.jpg(这工作正常)
- 转换图片1-JPG.jpg图片1-JPG.jpg(这工作正常)
- 转换 pic1-jpg.jpg 805X972+34+94 pic1-jpg 裁剪.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://stackoverflow.com/a/34633084/5398660 )
有谁知道可能会发生什么?
另外,谁能帮我解释@ error/constitute.c/ReadImage/504部分?我正在查看 constitute.c 的代码,但我不确定我是否可以从中获得有用的信息来解决我的问题(我只知道一点 C)
谢谢!
brew remove imagemagick //to delete current version
brew install imagemagick --build-from-source
在Mac上为我修复了它
我在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 命令没有问题,但是当我从 Azure 云上运行的 Tomcat 服务器运行命令时,收到了 OP 提到的错误消息。
我可以通过运行以下命令来确定原因:
convert -list format
在我的本地机器上,它会返回所有支持格式的长列表,而在 Kudu(Azure CLI 工具)上,它会返回一个空结果。这表示 ImageMagick 未找到处理所需的 DLL 文件的路径。
就我而言,问题只是由于Azure上缺少配置引起的:
- 系统环境变量 %PATH% 中缺少 ImageMagick 根文件夹
- 缺少环境变量"MAGICK_HOME">(设置为 ImageMagick 安装目录的根文件夹)
- 缺少环境变量"MAGICK_CODER_MODULE_PATH">(设置为上述文件夹 +/modules/coders)
注意:对于在 Azure 上也遇到此问题的用户,可以查看此 SO 答案,其中说明了如何使用 XDT 转换添加环境变量。
好的,通过玩,我想出了解决方案,我在这里发布它给可能遇到此问题的其他人:
显然,这不是/不再是/不是使用ImageMagick转换裁剪图像的方法。即使这里显示了这种用法,它也对我使用 El Capitan 不起作用(也许是操作系统?
而不是使用
转换 img.png 805X972+34+94 img 裁剪图.png
正确的命令是:
转换图像.png裁剪 805X972+34+94 图像裁剪.png
也就是说,命令是:
转换图像.ext -裁剪高度X宽度+位置X+位置Y* 图像裁剪.ext
更多可以在这里找到。 从那个 ImageMagick 页面上的描述中,我对他们转换玫瑰的例子感到困惑:-crop,但您可以按照我上面提到的方式使用它,它工作正常。
使用 JPG、PNG 和 TIFF 代表安装 ImageMagick - Ubuntu (20.04)
方法1
如果您使用的是某种版本的Linux,则ImageMagick可能已经安装在您的计算机上,如果您使用的是某种形式的Windows,则可能未安装。无论哪种情况,您都可以键入以下内容来查找:
- 克隆源存储库:
git clone https://github.com/ImageMagick/ImageMagick.git ImageMagick-7.1.0
Next 配置并编译 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
点击以下链接
使用 JPG、PNG 和 TIFF 代表安装 ImageMagick - Ubuntu (20.04)
我因缺少一些单引号而收到相同的错误。
将图像与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
周围添加单引号时,问题消失了。多么糟糕的错误!
我今天还必须在应用不同颜色空间配置文件的转换操作中解决这个问题。
似乎imagick的转换命令对配置文件文件名的文件扩展名很敏感。就我而言,它是一个没有后缀的临时文件,从问题标题触发了相同的错误消息
convert infile.jpg -profile /tmp/profile-without-suffix outfile.jpg
将正确的后缀添加到配置文件名称可解决此问题:
(采用 ICC 格式)
convert infile.jpg -profile /tmp/profile-without-suffix.icc outfile.jpg
对我来说(在macos Mojave上,使用CraftCMS的Imagick),我必须重新安装带有pecl uninstall imagick
和pecl install imagick
的Imageick(然后用sudo apachectl -k restart
重新启动Apache)。我一定运行了brew upgrade
并得到了一个较新版本的ImageMagick,这导致Imagick出现了类似的NoDecodeDelegateForThisImageFormat 'JPEG' @ error/constitute.c/ReadImage/556
错误。
另一个 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(大写),以便于阅读。但两者都有效。
我使用了合适的 docker 镜像,例如:
docker run -v /path/to/picsdir/:/pics --rm dpokidov/imagemagick /pics/img.heic /pics/img.png
这帮助我从HEIC转换为PNG。