Can ImageMagick return the image size?

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

-ping option

This option is also recommended as it prevents the entire image from being loaded to memory, as mentioned at:

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