ImageMagick能返回图像尺寸吗?

48

我正在使用命令行中的ImageMagick来调整图像大小:

convert -size 320x240 image.jpg

然而,我不知道如何确定最终图像的大小。由于这是等比例缩放的图像,新图像很可能是100x240或320x90(而不是320x240)。

我可以调用“convert”命令来调整图像大小并返回新的图像尺寸吗?例如,伪代码:

convert -size 320x240 -return_new_image_dimension image.jpg   // returns the new resized image dimensions
4个回答

58

-ping选项

此选项也是推荐的,因为它可以防止整个图像被加载到内存中,正如https://dev59.com/xX3aa4cB1Zd3GeqPfJXR#22393926所提到的:

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

man identify 说:

-ping                efficiently determine image attributes

我们可以举个例子,用维基媒体“大图”类别中的一些巨大图片进行测试,例如这张由范·高克创作的《星夜》的超高分辨率图片。维基媒体声称它的尺寸为29,696×29,696像素,文件大小为175.67 MB。请参见Wikimedia's "Large image" category
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

我注意到,在这种情况下,-ping 并没有对时间产生影响,也许只有对其他图像格式才有影响? 在 ImageMagick 6.9.10,Ubuntu 20.04 上进行了测试。 另请参阅: 快速获取图像尺寸(而不是文件大小)的方法

53

您可以使用额外的identify命令来实现:

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

8
为什么 identify -format "%[fx:w]x%[fx:h]"identify -format "%[w]x%[h]" 更好呢? - mark
1
我认为不是这样的,@mark。我无法想象回到2009年时%w%h还未被支持。但如果fx:有一些副作用的话,那么我想我也会提到它。很奇怪。我会进行一些测试... - Arjan

8

我对%w%h格式不太确定。虽然Photoshop显示我的图片大小为2678x3318(我真的相信Photoshop),但identify却给出了以下结果:

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

(so does [fx:w] and [fx:h])
([fx:w]和[fx:h]也是如此)
我必须使用
identify -ping -format '=> %[width] %[height]' image.jpg
=> 2678x3318

我不知道这里发生了什么事情,但您可以在标准输出中看到两个值(其中宽度和高度 => 之前是正确的)。

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

文档中提到,%w表示当前宽度,%[width]表示原始宽度。但这个说法容易让人感到困惑。

%w%h可能对大多数图片有效,但并不是所有情况都适用。


1
如果您指定了选项-verbose,convert会打印出以下内容:
original.jpg=>scaled.jpg JPEG 800x600=>100x75 100x75+0+0 8-bit sRGB 4.12KB 0.020u 0:00.009
                                       ^^^^^^

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接