![`magick` 可以将输出文件重命名为与输入文件相同的文件并附加编号吗?](https://linux22.com/image/1618984/%60magick%60%20%E5%8F%AF%E4%BB%A5%E5%B0%86%E8%BE%93%E5%87%BA%E6%96%87%E4%BB%B6%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%BA%E4%B8%8E%E8%BE%93%E5%85%A5%E6%96%87%E4%BB%B6%E7%9B%B8%E5%90%8C%E7%9A%84%E6%96%87%E4%BB%B6%E5%B9%B6%E9%99%84%E5%8A%A0%E7%BC%96%E5%8F%B7%E5%90%97%EF%BC%9F.png)
假设在一个文件夹中,我有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:”作为第一个图像参数,然后删除生成的垃圾图像。)