Can ImageMagick return the image size?

30,914

Solution 1

You could use an extra call to identify:

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

Solution 2

-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)

Solution 3

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.

Solution 4

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
                                       ^^^^^^
Share:
30,914
JacobT
Author by

JacobT

Updated on July 09, 2022

Comments

  • JacobT
    JacobT almost 2 years

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

    convert -size 320x240 image.jpg
    

    However, I don't know how to determine 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
    
  • mark
    mark about 9 years
    curious, why is identify -format "%[fx:w]x%[fx:h]" preferable to identify -format "%[w]x%[h]" ?
  • Arjan
    Arjan about 9 years
    I think it is not, @mark. I cannot imagine that back in 2009 the %w and %h were not supported yet. But if fx: has some side effect, then I guess I would have mentioned that as well. Weird. I will do some testing...