在 Linux 下将 PNG 和 JPG 批量互转的四种方法
创始人
2024-03-01 18:23:41
0

计算机术语中,批处理指的是用一个非交互式的程序来执行一序列的任务的方法。这篇教程里,我们会使用 Linux 命令行工具,并提供 4 种简单的处理方式来把一些 .PNG 格式的图像批量转换成 .JPG 格式的,以及转换回来。

虽然所有示例中我们使用的都是 convert 命令行工具,但是您也可以使用 mogrify 命令来达到同样的效果。

convert 命令的语法如下:

$ convert 输入选项 输入文件 输出选项 输出文件

mogrify 的为:

$ mogrify 选项 输入文件

注意:在使用 mogrify 命令时,默认情况下源图像文件会被转换后的新文件覆盖掉,您可以使用明确的操作选项来禁止覆盖,具体的选项可以在手册页中查询得到。

下面是把所有 .PNG 格式图像批量转换为 .JPG 格式的各种实现方式。如果想把 .JPG 转换为 .PNG 格式,也可使用这些命令,按需修改。

1、 使用 lsxargs 命令来转换 PNG 和 JPG

ls 命令 可以列出所有的 png 图像文件, xargs 使得可以从标准输入构建和执行 convert 命令,从而将所有 .png 图像转换为 .jpg 图像。

----------- 从 PNG 转换到 JPG ----------- 
$ ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.png}.jpg"'

----------- 从 JPG 转换到 PNG ----------- 
$ ls -1 *.jpg | xargs -n 1 bash -c 'convert "$0" "${0%.jpg}.png"'

关于上面命令选项的说明:

  1. -1 – 告诉 ls 每行列出一个图像名称的选项标识
  2. -n – 指定最多参数个数,例子中为 1
  3. -c – 指示 bash 运行给定的命令
  4. ${0%.png}.jpg – 设置新转换的图像文件的名字,% 符号用来删除源文件的扩展名

Convert PNG to JPG Format in Linux

Linux 中 PNG 格式转为 JPG 格式

我使用 ls -ltr 命令按修改的日期和时间列出所有文件

类似的,也可以使用上面的命令要把 .JPG 图像转换为 .PNG 格式,只需稍微调整就行。

2、 使用 GNU 的 parallel 命令来转换 PNG 和 JPG

GNU 的 parallel 使用户能够从标准输入并行构建和执行 shell 命令。确保您的系统上安装了 GNU Parallel,否则请使用以下适当的命令进行安装:

$ sudo apt-get install parallel     [在 Debian/Ubuntu 系统中]
$ sudo yum install parallel         [在 RHEL/CentOS 和 Fedora 系统中]

安装好 parallel 工具后,您就可以运行下面的命令来把所有从标准输入的 .PNG 图像转换成 .JPG 格式的图像。

----------- 从 PNG 转换到 JPG ----------- 
$ parallel convert '{}' '{.}.jpg' ::: *.png

----------- 从 JPG 转换到 PNG -----------
$ parallel convert '{}' '{.}.png' ::: *.jpg

其中:

  1. {} – 输入行替代符,代替了从输入源读取的完整行。
  2. {.} – 去除扩展名的输入行。
  3. ::: – 指定输入源的符号,即上面示例的命令行,在这里 png 或 jpg 是命令参数。

Parallel Command - Converts All PNG Images to JPG Format

Parallel 命令 – 把所有 PNG 图像转换为 JPG 格式

或者,您也可以结合 lsparallel 命令来批量转换所有图像,如图所示:

----------- 从 PNG 转换到 JPG ----------- 
$ ls -1 *.png | parallel convert '{}' '{.}.jpg'

----------- 从 JPG 转换到 PNG -----------
$ ls -1 *.jpg | parallel convert '{}' '{.}.png'

3、 使用 for 循环命令来转换 PNG 和 JPG

为了避免编写 shell 脚本的繁琐,你可以从命令行执行 for 循环语句,如下所示:

----------- 从 PNG 转换到 JPG ----------- 
$ bash -c 'for image in *.png; do convert "$image" "${image%.png}.jpg"; echo “image $image converted to ${image%.png}.jpg ”; done'

----------- 从 JPG 转换到 PNG -----------
$ bash -c 'for image in *.jpg; do convert "$image" "${image%.jpg}.png"; echo “image $image converted to ${image%.jpg}.png ”; done'

对上面的命令所使用的选项参数的描述:

  1. -c 允许执行包括在单引号中的循环语句。
  2. image 变量是目录中的图像名的数量记数器。
  3. 对于每个转换操作,在 $image 转换为 ${image%.png}.jpg 这行中,echo 命令通知用户 png 图像已经转换为 jpg 格式,反之亦然。
  4. ${image%.png}.jpg 语句创建了转换后的图像名字,其中 % 表示去除源图像文件的扩展名。

for loop - Convert PNG to JPG Format

for 循环语句 – 从 PNG 转换到 JPG 格式

4、 使用 Shell 脚本来转换 PNG 和 JPG

如果你不想像前面的例子那样让你的命令行变得邋遢的话,可以写一个小脚本,如下所示:

注意:适当地交换 .png.jpg 扩展名,如下面的例子所示,从一种格式转换到另一种格式:

#!/bin/bash
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo “image $image converted to ${image%.png}.jpg ”
done
exit 0 

把上面的脚本保存为 convert.sh 文件,然后使此脚本文件可执行,接着从存有图像文件的目录下执行。

$ chmod +x convert.sh
$ ./convert.sh

Batch Image Convert Using Shell Script

使用 Shell 脚本来批量图像转换

总之,我们介绍了一些重要的将 .PNG 图像批量转换为 .JPG 格式的方法,以及再转回来。如果还想对图像进行一些优化的话, 您可以移步到 Linux 系统中如何压缩 png 和 jpg 图像这篇指导文章。

您可以给我们分享一些包括 Linux 命令行工具在内的把图像从一种格式转成另一种格式的方式方法,或者在下面的评论部分畅所欲言。


via: http://www.tecmint.com/linux-image-conversion-tools/

作者:Aaron Kili 译者:runningwater 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

不支持;需要 @Dynam...
当使用DynamoDBMapper进行对象映射时,如果出现错误消息...
2025-01-12 01:00:47
不支持大整数时不能调用Ra...
要解决问题“不支持大整数时不能调用Ramsey\Uuid\Conv...
2025-01-11 18:31:56
不太理解PowerShel...
在PowerShell中,"-Join"是用于将一个数组或字符串的...
2025-01-08 03:31:46
BusinessCentr...
这可能是因为Business Central使用不同的字符集或编码...
2025-01-08 02:31:55
不使用ImageIO.re...
在Java中,我们可以通过以下代码示例将JPG图片转换为PNG图片...
2024-12-28 21:00:17
不使用ImageIO.re...
使用第三方库,比如OpenCV、ImageMagick等进行图片格...
2024-12-28 20:31:14

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...