问题
Problem: ImageMagick convert is unable to crop image. It looks like it doesn't recognize the image type?
What I've Tried:
I've searched around online and I've seen several similar issues but not mine. I've attempted their solutions including
- Uninstalling and reinstalling ImageMagick via brew.
- identify -list format (JPEG, GIF, PNG, TIFF, etc were all there and all had rw permissions)
- convert -version (png is is among the built-in delegates)
- convert pic1.png pic1-jpg.jpg (this worked fine)
- convert pic1-jpg.jpg pic1-jpg.jpg (this worked fine)
- convert pic1-jpg.jpg 805X972+34+94 pic1-jpg-crop.jpg (this gave the same error as for png as shown below)
I'm working on Mac OSX El Capitan and everything else in terminal works fine. ImageMagick was already installed.
When I run:
$ 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
I get:
convert: unable to open image `805X972+34+94': No such file or directory @ error/blob.c/OpenBlob/2702.
convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/504.
no decode delegate for this image format `' @ error/constitute.c/ReadImage/504
In the other posts on this issue, people get
convert no decode delegate for this image format `PNG'
Or similar (except with their image type or filename and image type)
However, mine doesn't say anything about image file type...
I have not tried uninstalling ImageMagick then installing it manually from sources because I'm not very confident at doing that... (this solution was shown: https://stackoverflow.com/a/34633084/5398660 )
Does anyone know what might be going on?
Also, can anyone help me interpret the @ error/constitute.c/ReadImage/504 part? I'm looking at the code for constitute.c but I'm not sure if I can get useful information from it to solve my problem (I only know a bit of C)
Thank you!
回答1:
brew remove imagemagick //to delete current version
brew install imagemagick --build-from-source
fixed it for me on mac
回答2:
Throwing in my two cents as I too have struggled with this problem for the last few days. I had no problem running ImageMagick commands on my local machine, but got the error message as mentioned by OP when I ran the command from a Tomcat server running on Azure Cloud.
I could identify the cause by running the following command:
convert -list format
On my local machine, it would return quite a long list of all the supported formats, whereas on Kudu (Azure CLI tool) it would return an empty result. This indicates ImageMagick didn't find the path to its DLL files required for processing.
In my case, the problem was simply caused by a lack of configuration on Azure:
- The absence of the ImageMagick root folder in the system environment variable %PATH%
- The absence of an environment variable "MAGICK_HOME" (set to the root folder of your ImageMagick installation directory)
- The absence of an environment variable "MAGICK_CODER_MODULE_PATH" (set to the folder mentioned above + /modules/coders)
NOTE: for people who are also experiencing this problem on Azure, you can have a look at this SO answer which explains how to add an environment variable using an XDT Transform.
回答3:
Alright, with playing around I figured out the solution and I'm posting it here for other people who might run into this issue:
Apparently, this is not/no longer is/not for me the way to crop an image using ImageMagick convert. Even though this usage is shown here it did not work for me using El Capitan (maybe it's the OS?).
Instead of using
convert img.png 805X972+34+94 img-crop.png
The correct command, which works is:
convert image.png -crop 805X972+34+94 image-crop.png
That is, the command goes:
convert image.ext -crop heightXwidth+positionX+positionY* imagecropped.ext
More can be found here. From the description on that ImageMagick page I was confused about the example where they have convert rose: -crop but you can just use it the way I mentioned above and it works fine.
回答4:
I was receiving the same error for missing some single quotes.
When combining images with convert -draw with quotes, the image supplied must be wrapped in quotes.
No decode delegate for this image format `' @ 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
When I added in the single quotes around myForeground
the issue disappeared. What a lousy error!
回答5:
An alternate Imagemagick command would be:
convert pic1-jpg.jpg[805x972+34+94] pic1-jpg-crop.jpg
or as stated earlier
convert pic1-jpg.jpg -crop 805x972+34+94 +repage pic1-jpg-crop.jpg
see Inline Image Crop at https://www.imagemagick.org/script/command-line-processing.php
Generally, I prefer the use of x (lower case) rather than X (uppercase) between the width and height, for easier reading. But either works.
回答6:
I also had to fight this problem today in a convert operation that applied a different color space profile.
It seems imagick's convert command is sensitive to the file extension of the profile's file name. In my case it was a temporary file without a suffix that triggered the same error message from the question title
convert infile.jpg -profile /tmp/profile-without-suffix outfile.jpg
Adding the correct suffix to the profile file name fixes the problem:
(assuming ICC format)
convert infile.jpg -profile /tmp/profile-without-suffix.icc outfile.jpg
回答7:
For me (on macos Mojave, using Imagick with CraftCMS) I had to reinstall Imagick with pecl uninstall imagick
and pecl install imagick
(and then restart Apache with sudo apachectl -k restart
). I must have run brew upgrade
and got a newer version of ImageMagick which caused Imagick to barf up a similar error of NoDecodeDelegateForThisImageFormat 'JPEG' @ error/constitute.c/ReadImage/556
.
来源:https://stackoverflow.com/questions/37594157/imagemagick-no-decode-delegate-for-this-image-format-error-constitute-c-re