ned*_*ned 199 linux png jpeg shell-script
有谁知道在 linux 中将一堆 PNG 批量转换为 JPG 的好方法吗?(我正在使用 Ubuntu)。
我可以直接放入 shell 脚本的 png2jpg 二进制文件是理想的。
Wil*_*sum 296
您最好的选择是使用ImageMagick。
我不是实际使用方面的专家,但我知道你几乎可以做任何与图像相关的事情!
一个例子是:
convert image.png image.jpg
Run Code Online (Sandbox Code Playgroud)
这将保留原始图像并创建转换后的图像。
至于批量转换,我认为您需要使用ImageMagick 中的Mogrify工具。
请记住,这会覆盖旧图像。
命令是:
mogrify -format jpg *.png
Run Code Online (Sandbox Code Playgroud)
Kev*_*Cox 99
我还有几个解决方案。
最简单的解决方案就像大多数已经发布的一样。一个简单的 bash for 循环。
for i in *.png ; do convert "$i" "${i%.*}.jpg" ; done
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我倾向于避免 bash 中的循环,所以这里有一个更 unixy xargs 的方法,使用 bash 进行名称修改。
ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.*}.jpg"'
Run Code Online (Sandbox Code Playgroud)
我用的那个。它使用 GNU Parallel 一次运行多个作业,从而提高性能。它默认安装在许多系统上,并且几乎肯定在您的存储库中(这是一个很好的程序)。
ls -1 *.png | parallel convert '{}' '{.}.jpg'
Run Code Online (Sandbox Code Playgroud)
作业数默认为您拥有的 CPU 内核数。我在我的双核系统上使用 3 个作业发现了更好的 CPU 使用率。
ls -1 *.png | parallel -j 3 convert '{}' '{.}.jpg'
Run Code Online (Sandbox Code Playgroud)
如果你想要一些统计数据(预计到达时间、完成的工作、每项工作的平均时间......)
ls -1 *.png | parallel --eta convert '{}' '{.}.jpg'
Run Code Online (Sandbox Code Playgroud)
如果您使用 GNU Parallel,还有另一种语法。
parallel convert '{}' '{.}.jpg' ::: *.png
Run Code Online (Sandbox Code Playgroud)
以及其他一些版本(包括 debian)的类似语法。
parallel convert '{}' '{.}.jpg' -- *.png
Run Code Online (Sandbox Code Playgroud)
Mar*_*cin 26
convert在许多 Linux 发行版上找到的命令是作为 ImageMagick 套件的一部分安装的。这是convert在目录中的所有 PNG 文件上运行的 bash 代码,并避免双重扩展问题:
for img in *.png; do
filename=${img%.*}
convert "$filename.png" "$filename.jpg"
done
Run Code Online (Sandbox Code Playgroud)
Ste*_*ies 14
对于那些只想要最简单命令的人:
转换并保留原始文件:
mogrify -format jpg *.png
Run Code Online (Sandbox Code Playgroud)
转换和删除原始文件:
mogrify -format jpg *.png && rm *.png
Run Code Online (Sandbox Code Playgroud)
参加聚会有点晚,但只是为了让那些可能对 cli 不太舒服的人感到困惑,这里有一个超级愚蠢的参考和解释。
示例目录
bar.png
foo.png
foobar.jpg
Run Code Online (Sandbox Code Playgroud)
保留所有原始 png 文件以及创建 jpg 文件。
mogrify -format jpg *.png
Run Code Online (Sandbox Code Playgroud)
结果
bar.png
bar.jpg
foo.png
foo.jpg
foobar.jpg
Run Code Online (Sandbox Code Playgroud)
解释
-format选项除外。(从网站:This tool is similar to convert except that the original image file is overwritten (unless you change the file suffix with the -format option))- format选项指定您将更改格式,下一个参数需要是类型(在本例中为 jpg)。*.png是输入文件(所有以 .png 结尾的文件)。将所有 png 文件转换为 jpg,删除原始文件。
mogrify -format jpg *.png && rm *.png
Run Code Online (Sandbox Code Playgroud)
结果
bar.jpg
foo.jpg
foobar.jpg
Run Code Online (Sandbox Code Playgroud)
解释
&&是一个布尔运算符。简而言之:
0表示没有错误。&&执行短路评估,只有在没有错误的情况下才会执行正确的部分。这很有用,因为如果转换它们时出现错误,您可能不想删除所有原始文件。rm命令删除文件。现在,这里是对谁的人一些东西是舒适的CLI。
如果您在转换文件时想要一些输出:
for i in *.png; do mogrify -format jpg "$i" && rm "$i"; echo "$i converted to ${i%.*}.jpg"; done
Run Code Online (Sandbox Code Playgroud)
转换所有子目录中的所有 png 文件并为每个文件提供输出:
find . -iname '*.png' | while read i; do mogrify -format jpg "$i" && rm "$i"; echo "Converted $i to ${i%.*}.jpg"; done
Run Code Online (Sandbox Code Playgroud)
转换所有子目录中的所有 png 文件,将所有生成的 jpg 放入all目录中,编号,删除原始 png 文件,并在每个文件发生时显示输出:
n=0; find . -iname '*.png' | while read i; do mogrify -format jpg "$i" && rm "$i"; fn="all/$((n++)).jpg"; mv "${i%.*}.jpg" "$fn"; echo "Moved $i to $fn"; done
Run Code Online (Sandbox Code Playgroud)
png2jpg您正在寻找的实际“ ”命令实际上分为两个名为pngtopnmand 的命令cjpeg,它们分别是netpbmandlibjpeg-progs包的一部分。
png2pnm foo.png | cjpeg > foo.jpeg
Run Code Online (Sandbox Code Playgroud)
小智 7
find . -name "*.png" -print0 | xargs -0 mogrify -format jpg -quality 50
Run Code Online (Sandbox Code Playgroud)
小智 5
我的快速解决方案
for i in $(ls | grep .png); do convert $i $(echo $i.jpg | sed s/.png//g); done
| 归档时间: |
|
| 查看次数: |
255191 次 |
| 最近记录: |