如何自动转换图像

时间:2016-06-16 23:15:23

标签: bash imagemagick-convert

我可以像这样转换图像:

convert -resize 50% foo.jpg foo_50.jpg

如何自动执行此命令以转换文件夹中的所有图像?

您可以假设每张图片都有.jpg个扩展名。

最好能够轻松适应自动转换工作目录子目录中所有图像的解决方案。

3 个答案:

答案 0 :(得分:3)

您可以使用带有模式扩展的for循环:

for img in */*.jpg ; do
    convert -resize 50% "$img" "${img%.jpg}"_50.jpg
done

${variable%pattern}从$变量的右侧删除模式。

答案 1 :(得分:1)

您可以使用find -exec

find -type f -name '*.jpg' -exec \
bash -c 'convert -resize 50% "$0" "${0%.jpg}"_50.jpg' {} \;

find -type f -name '*.jpg'找到所有.jpg个文件(包括子目录中的文件)并将其交给-exec后的命令,可以使用{}引用它。

因为我们想要使用参数扩展,所以我们不能直接使用-exec convert -resize;我们必须调用bash -c并提供{}作为它的位置参数(命令内的$0)。 \;标记-exec命令的结束。

答案 2 :(得分:0)

你也可以尝试使用ls + awk:

这个(不那么优雅)的单线程
ls *.jpg | awk -F '.' '{print "convert -resize 50% "$0" "$1"_50.jpg"}' | sh

这假设所有.jpg文件都在当前目录中。在运行此操作之前,请尝试删除| sh并查看屏幕上显示的内容。