在 Linux 中批量将 PNG 转换为 JPG

在 Linux 中批量将 PNG 转换为 JPG

有人知道在 Linux 中将一堆 PNG 批量转换为 JPG 的好方法吗?(我使用的是 Ubuntu)。

我可以直接放入 shell 脚本的 png2jpg 二进制文件是理想的。

答案1

最好的选择是使用图像魔术师

在实际使用方面我不是专家,但我知道你可以用它做任何与图像相关的事情!

例如:

convert image.png image.jpg

它将保留原始图像并创建转换后的图像。

至于批量转换,我认为你需要使用莫格里菲工具是 ImageMagick 的一部分。

请记住,这覆写旧图像。

命令是:

mogrify -format jpg *.png

答案2

我还有几个解决方案。

最简单的解决方案与大多数已发布的解决方案类似。一个简单的 bash for 循环。

for i in *.png ; do convert "$i" "${i%.*}.jpg" ; done

由于某种原因,我倾向于避免在 bash 中使用循环,因此这里是一种更 unixy xargs 的方法,使用 bash 进行名称处理。

ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.*}.jpg"'

我使用的就是这个。它使用 GNU Parallel 同时运行多个作业,从而提高性能。它在许多系统上默认安装,并且几乎肯定在您的存储库中(这是一个不错的程序)。

ls -1 *.png | parallel convert '{}' '{.}.jpg'

作业数量默认与您拥有的 CPU 核心数量相同。我发现在双核系统上使用 3 个作业可以提高 CPU 使用率。

ls -1 *.png | parallel -j 3 convert '{}' '{.}.jpg'

如果您想要一些统计数据(预计到达时间、已完成的工作、每项工作的平均时间......)

ls -1 *.png | parallel --eta convert '{}' '{.}.jpg'

如果您使用 GNU Parallel,还有另一种语法。

parallel convert '{}' '{.}.jpg' ::: *.png

对于其他一些版本(包括 debian),也有类似的语法。

parallel convert '{}' '{.}.jpg' -- *.png

答案3

许多 Linux 发行版上的命令都是作为 ImageMagick 套件的一部分安装的。以下是用于在目录中的所有 PNG 文件上convert运行并避免双重扩展问题的 bash 代码:convert

for img in *.png; do
    filename=${img%.*}
    convert "$filename.png" "$filename.jpg"
done

答案4

您正在寻找的实际“ png2jpg”命令实际上分为两个称为pngtopnm和的命令cjpeg,它们分别是netpbmlibjpeg-progs包的一部分。

png2pnm foo.png | cjpeg > foo.jpeg

相关内容