如何在 Linux 中使用 Imagemagick 或类似命令或程序批量压缩图像

如何在 Linux 中使用 Imagemagick 或类似命令或程序批量压缩图像

我最近从 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做别的事 :)

相关内容