我最近从 imagemagick 中了解到了 convert 命令,我曾用它压缩过很多个人使用的图片以及我博客的图片。根据我的经验,Imagemagick 是最好的图片压缩程序,它能让你最大程度地控制图片的压缩方式。我还有很多图片需要压缩,但不想对每个文件都使用 convert 命令那么多次。主要问题是这样做非常耗时。我希望能够采用一种大批量的方式来压缩我的图片。我可以通过命令行来执行此操作,但 GUI 可能会让这更直观一些。
下面是我用来将原始图像缩小到原始大小 20% 的命令示例。 convert -resize 20% 20140322_102113.jpg 20140322_102113opt.jpg
如果我有 100 张图片,并且它们都在同一个文件夹中,我希望能够执行以下操作
对于所有图像转换 -resize 20% imagename.jpg imagename_optimized.jpg
我不知道是否有命令可以做到这一点,但如果没有,我想创建一个 bash 命令,但我对 bash 不太熟悉。如果能帮助创建这个简单的 bash 脚本,或者就如何解决我的困境提出建议,我将不胜感激。我使用 Linux,只想要一个专门针对 Linux 的解决方案。谢谢
答案1
命名格式略有不同,但是:
for img in *.jpg; do
convert -resize 20% "$img" "opt-$img"
done
答案2
使用“for”循环肯定有效 - 并且是一种很好的通用技术 - 但您的机器上几乎肯定有多个处理器,那么为什么一次只进行一次转换呢?
如果你这样做,你可以让事情进展得更快:
find . -name '*.jpg' | xargs -n1 -P8 -I{} convert -resize 20% "{}" "opt-{}"
xargs 的参数是:
n1 - Only give 'convert' one file at a time
P8 - Use 8 processes
I{} - Replace {} with the filename given by 'find'
然后给出转换命令。
答案3
尝试使用for i in $( ls *.jpg); do convert -resize 20% $i optimized_$i; done
(您可以设置文件夹的路径,而不仅仅是*.jpg
)
作为 GUI,您可以使用匡威
答案4
我认为一个简单的 bash 脚本可以帮助你。
for i in `ls /path/to/img/dir`; do convert -resize 20% "/path/to/img/dir/${i:0:-4}" "/path/to/new/img/dir/${i:0:-4}_optimized.jpg"; done
笔记:${i:0:-4}
是删除.jpg
扩展名。如果您的文件具有不同的扩展名长度,您可能需要更改-4做别的事 :)