命令行工具将图像文件的大小调整为最大大小并更改大小写

时间:2014-11-28 15:47:34

标签: image file batch-file converter jpeg

假设您有一个包含大量图片的文件夹。文件大小和扩展名因图像而异,您希望以相同的格式保持一致。有办法:

  • 使文件名大写和扩展名小写(如果尚未):EXAMPLE.jpg
  • 如果当前类型不是jpg,则将图像转换为.jpg。 (可能是png,tiff,bmp,psd等)
  • 将图片转换为最大值如果当前较大,则为5 MB,但如果大于5 MB则仅调整大小,否则保持原样。图像尺寸不需要更改。

如何做到这一点?

对不起,如果这是一个太广泛的问题,但我已经找了各种工具,如BulkRenameUtility,Flash Renamer,JPEG resizer,ReaConverter。所有优秀的工具,但它们都使用GUI,我想创建一个在Windows服务器上每晚自动运行的解决方案。重命名部分可以使用BRU或flashrenamer的命令行来完成,但是如何使用max filesize转换为JPEG ...

1 个答案:

答案 0 :(得分:2)

您可以使用ImageMagick,Bash和tr命令行工具执行此操作。使用以下元素编写shell脚本。

首先,重命名文件:

 file_orig=${input}                                           # ex.: "aBcD.png"
 file_upper=$(echo $(basename ${input}) | tr "[a-z]" "[A-Z]") # ex.: "ABCD"

然后,使用ImageMagick的convert命令转换为JPEG:

 convert ${input} ${file_upper}.jpg                           # ex.: "ABCD.jpg"

这是最基本的用法。它还没有适用于您的文件大小条件。您可以使用基本shell命令检查文件大小,并以检查结果为条件运行命令。

但这是一个更优雅的方法:ImageMagick(如果它的版本是IM v6.5.8-2或更新版本)可以使用-define jpeg:extent={size}进行JPEG输出,其中{size}指定文件大小后缀(例如:5000kb5mb为5 MByte)。

它的工作方式如下:convert创建JPEG输出的多个版本。它尝试使用不同的质量设置,直到它尽可能接近给定的文件大小而不超过它。它将结果可重复写入临时文件。找到合适的质量+大小后,它会将最终图像输出到给定的输出文件名并删除临时文件:

 convert                   \
   -define jpeg:extent=5mb \
    ${input}               \
    ${file_upper}.jpg  

ImageMagick也适用于Windows。 (我在Linux和Mac OSX上测试过。)