Imagemagick:如何获取图像宽度,然后使用它来将文件夹中的所有图像批量调整为宽度 x 宽度 / 2?

问题描述

我有超过 400 张图片需要调整大小。它们需要是它们各自的原始宽度,但高度需要正好是每个图像宽度的一半。

我已经尝试了 3 个小时在 Imagemagick 中获得一些工作,但没有运气。

有什么想法吗? 非常感谢!

magick 40inch_downbelow_001.jpg -ping -resize "x%w/2" 40inch_downbelow_0aaaaaaa01.jpg - 这是我当前的命令,这只是一个测试。尽管告诉它使用一半的宽度,但这会吐出一个完全相同大小的图像。

解决方法

这里有两种在 Windows 中完成此操作的方法,一种使用 ImageMagick v6,另一种使用 v7。这些将运行目录中的所有 JPG 图像。

使用 IMv6...

for %I in ( *.jpg ) do (
   convert "%I" -set filename:0 "%[t]XXX.%[e]" ^
   +distort SRT "0,0 1,%[fx:w/h/2] 0" -shave 1 "%[filename:0]"
)

使用 IMv7...

for %I in ( *.jpg ) do (
   magick "%I" -set filename:0 "%[t]XXX.%[e]" -resize "x%[fx:w/2]!" "%[filename:0]"
)

将您的文件名修饰符替换为我在示例中使用的“XXX”。要在 BAT 脚本中使用这些命令,您需要将百分号“%%”加倍。

,

我想你想要这个,对于单个图像:

magick input.png -resize "x%[fx:int(w/2)]\!" result.png

x 之前没有任何内容的事实意味着宽度保持不变。新高度计算为宽度的一半,感叹号允许扭曲原始纵横比。

如果要对当前目录下的所有PNG进行处理,请使用:

#!/bin/bash

for f in *.png; do
   magick "$f" -resize "x${h}\!" "$f"
done

如果您只有旧的 v6 ImageMagick,请使用:

#!/bin/bash

for f in *.png; do
   # Get current width and halve it
   w=$(identify -format "%w" "$f")
   ((h=w/2))
   mogrify -resize x${h}\! "$f"
done