假设在一个文件夹中,我有dog.jpg
和fish.jpg
。我想将它们的大小调整 50%,并使用相同的名称保存它们,但使用数字索引。我如何使用magick
(允许我稍后进行管道传输)来做到这一点?我尝试了以下方法,但似乎不起作用:
magick '*.jpg' -set filename:base "%[basename]" -resize 50% '%[filename:base]_%02d.jpg'
它按照需要生成了dog_%02d.jpg
和,fish_%02d.jpg
而不是dog_01.jpg
和fish_02.jpg
。
答案1
我仔细阅读了IM 百分比转义(也可以看看) 和IM 序列帧编号并没有看到任何表明这一点的东西,但我的实验似乎表明,printf 样式的序列帧号转义(例如%02d
)只能在传递输出文件参数而没有其他百分比转义时使用:
[gnubeard@mothership: ~]$ convert *.jpg 'image_%02d.jpg'
[gnubeard@mothership: ~]$ ls *.jpg
dog.jpg fish.jpg image_00.jpg image_01.jpg
对阵
[gnubeard@mothership: ~]$ convert '*.jpg' -set filename:f "%t" -resize 50% '%[filename:f]_%02d.jpg'
[gnubeard@mothership: ~]$ ls *.jpg
dog_%02d.jpg.jpg dog.jpg fish_%02d.jpg.jpg fish.jpg
这可能不太理想,因为您无法控制文件名中的数字数量,但这里有一个解决方法:
[gnubeard@mothership: ~]$ convert '*.jpg' -set filename:f "%t_%p" -resize 50% '%[filename:f].jpg'
[gnubeard@mothership: ~]$ ls *.jpg
dog_0.jpg dog.jpg fish_1.jpg fish.jpg
escape%p
计算当前序列帧号,这可能足以满足您的目的。(请注意,索引从 0 开始,并且记录解决方案如果您希望索引从 1 开始,请传递“null:”作为第一个图像参数,然后删除生成的垃圾图像。)