将具有相同名称但不同扩展名的图像转换。

3
例如,我有两个文件:
aaa.jpg        (with cat)
aaa.png        (with dog)

正如您所见,这些图像名称相同,但它们是不同的。

我希望将这两个图像转换为一个统一的格式。

这项任务的基本尝试是:

mogrify -format jpg *.png

但是由于一个文件夹不能包含多个具有相同名称和扩展名的文件,因此它不起作用。
此外,这是我的一些注释:
  1. 请注意,这只是一个示例。在实际生活中,大约会有100-200张图片。
  2. 从我的角度来看,似乎存在至少两种方法来解决这个问题:给文件名添加时间戳或者添加随机文本。我认为添加随机文本会更好,因为如果处理非常快,则时间戳有时可能相等。
那么,您对这个任务有什么建议,以及如何完成它?谢谢。

2
如果你的文件名像aaa这样不具描述性,那么最好将文件编号。 - Mark Setchell
你使用的操作系统是哪个? - Andrea
@Andrea Windows 7。 - user90726
2个回答

3

你可以使用 convert 代替 mogrify 命令,并利用 -set filename:f 修改原始文件名,例如添加包含计数器的后缀:

convert *.png -set filename:f "%t_%p" "%[filename:f].jpg"

需要翻译的内容:

%p%t属性的含义如下:

  • %p:当前图像列表中图像的索引
  • %t:不包括目录或扩展名(后缀)的文件名

更多详细信息请参见此处

如果这是您的起始情境:

aaa.jpg        
aaa.png        
bbb.jpg        
bbb.png  

最终情况将是:
aaa.jpg        
aaa.png        
bbb.jpg        
bbb.png   
aaa_0.jpg
bbb_1.jpg

谢谢。我应该做更多的测试,但是目前复制黏贴代码无法工作。 convert.exe:缺少图像文件名0[filename:f].jpg' @ error/convert.c/ConvertImageCommand/3238。 - user90726
这对我有效:convert *.png -set filename:f "%t_%p" "%[filename:f].jpg"。为什么你发布了稍微不同的版本?(我的意思是,为什么你在命令中添加了“zero”?) - user90726
@jsv 是的,你说得对:我进行了许多实验,最终粘贴了错误的命令... 现在我已经更新了答案,感谢你的反馈。 - Andrea

3
在类似情况下,我会添加文本(而不是随机的文本),这样文件就会变成aaa_png.png和aaa_jpg.jpg。因此,在转换后,您将拥有aaa_png.jpg和aaa_jpg.jpg,这应该有助于跟踪事物并免受您遇到的问题的影响。
正如@jsv指出的那样,您可以在一步中完成此操作:
convert *.png -set filename:f "%t_%e" "%[filename:f].jpg

如果您按照这种方式操作,原始的“aaa.png”和“aaa.jpg”文件仍将存在,同时生成新的“aaa_png.jpg”文件。

1
进一步阅读:convert *.png -set filename:f "%t_%e" "%[filename:f].jpg" - user90726

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