开发者

Can ImageMagick return the image size?

I'm using ImageMagick from the command line to resize images:

convert -size 320x240 image.jpg

However, I don't know how to determ开发者_如何学Cine the size of the final image. Since this is a proportional image scale, it's very possible that new image is 100x240 or 320x90 in size (not 320x240).

Can I call the 'convert' command to resize the image and return the new image dimensions? For example, pseudo code:

convert -size 320x240 -return_new_image_dimension image.jpg   // returns the new resized image dimensions


-ping option

This option is also recommended as it prevents the entire image from being loaded to memory, as mentioned at: https://stackoverflow.com/a/22393926/895245:

identify -ping -format '%w %h' image.jpg

man identify says:

-ping                efficiently determine image attributes

We can for example test it out with some of the humongous images present on Wikimedia's "Large image" category e.g. this ultra high resolution image of Van Gogh's Starry Night which Wikimedia claims is 29,696 × 29,696 pixels, file size: 175.67 MB:

wget -O image.jpg https://upload.wikimedia.org/wikipedia/commons/e/e8/Van_Gogh_-_Starry_Night_-_Google_Art_Project-x0-y0.jpg
time identify -ping -format '%w %h' image.jpg
time identify       -format '%w %h' image.jpg

I however observed that -ping at least in this case did not make any difference on the time, maybe it only matters for other image formats?

Tested on ImageMagick 6.9.10, Ubuntu 20.04.

See also: Fast way to get image dimensions (not filesize)


You could use an extra call to identify:

convert -size 320x240 image.jpg; identify -format "%[fx:w]x%[fx:h]" image.jpg


I'm not sure with the %w and %h format. While Photoshop says my picture is 2678x3318 (and I really trust Photoshop), identify gives me:

identify -ping -format '=> %w %h' image.jpg
=> 643x796

(so does [fx:w] and [fx:h])

I had to use

identify -ping -format '=> %[width] %[height]' image.jpg
=> 2678x3318

I don't know what's going on here, but you can see both values on standard output (where the width and height before the => are the correct ones)

identify -ping image.jpg
image.jpg PAM 2678x3318=>643x796 643x796+0+0 16-bit ColorSeparation CMYK 2.047MB 0.000u 0:00.000

The documentation says %w is the current width and %[width] is original width. Confusing.

%w and %h may be correct for most uses, but not for every picture.


If you specify option -verbose, convert prints:

original.jpg=>scaled.jpg JPEG 800x600=>100x75 100x75+0+0 8-bit sRGB 4.12KB 0.020u 0:00.009
                                       ^^^^^^
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜