批量将图像从一种格式转换为另一种格式?

我想将近100张图片批量转换为png格式,而不是重命名它们,应该如何实现?


使用“convert”命令进行转换。不开玩笑。但您需要将它们从something.jpg重命名为something.png。 - Jos
1@jos,从你的评论中我不明白我应该做什么!! - opu 웃
我还没编辑完;-) 首先,试试在单个.jpg文件上使用convert命令,看看是否有效。然后,编写一个脚本,循环处理.jpg文件,并将其转换为.png文件。 - Jos
你没有提到如何在单个 .jpg 文件上使用 convert 命令。而且我不知道如何编写一个循环遍历 .jpg 文件的脚本。 - opu 웃
4个回答

尝试一下这些命令,
mogrify -format png /path/*.jpg    

这将把所有的.jpg文件转换为.png文件,并将转换后的文件保存在同一目录中。
mv /path/*.png ~/Desktop/pic

这将把所有的.png文件(已转换)移动到位于桌面上的pic目录中。
免责声明:
如果您想保持图像的方向,您需要在命令中添加-auto-orient。您可以在这里找到原因。保持方向的mogrify命令如下所示:
mogrify -auto-orient -format png /path/*.jpg    

我应该改变目录吗? - opu 웃
1/path/*.jpg 表示存储 .jpg 文件的目录。 - Avinash Raj
我在改变目录后也尝试了这个命令:mogrify -format png .jpg 这个也很好用。 - opu 웃
以下的答案更好,因为它考虑了对ARGV参数的限制。 - Evan Carroll
这里有一个很棒的指南:http://www.algissalys.com/how-to/how-to-quickly-rename-modify-and-scale-all-images-in-a-directory-using-linux 还涵盖了改变图像大小的内容,非常有用,比如添加-resize 800x可以将最长边改为800 :) - Craig Lambie
1mogrify 命令是否无损? - Mona Jalal
可以使用mogrify的-path选项在一行中完成此答案:mogrify -format png -path ~/Desktop/pic /path/*.jpg - Trevor
@opu 命令应该是 mogrify -format png *.jpg 而不是 mogrify -format png .jpg。在 format 后面的参数是要转换成的格式(在这个例子中是 png)。然后下一个参数是文件/文件夹(由通配符 * 定义),mogrify 将从这些文件中创建转换后的副本。在这个例子中,文件由 *.png 确定 - 当前目录中以 .png 结尾的文件将会有它们的转换副本被创建,格式为 jpg。抱歉 opu,我不能在提及中使用你的完整用户名 - askubuntu 不允许我输入你名字中的符号。 - therobyouknow
我不知道为什么,但这个命令会使我的图像在垂直方向上翻转(我用的是Windows)。 - KeyC0de
它旋转图像。 - MH.AI.eAgLe

使用ImageMagick。
首先安装ImageMagick:
sudo apt-get install imagemagick

先试着只转换一张图片:
convert image.jpg image.png

现在全部转换:

mogrify -format png *.jpg

编辑

你还需要把它分成适合的块,以避免超出命令行的限制。这样应该效果更好:

find -name '*.jpg' -print0 | xargs -0 -r mogrify -format png

-print0-0用于处理文件名中的空格,-r表示如果没有要处理的内容,则不运行mogrify。

来源:https://stackoverflow.com/questions/1010261/running-a-batch-with-imagemagick

编辑2 根据@Glutanimate的评论,将png和jpg互换。

编辑3 在最后的建议中将png更改为jpg。


成功转换了一张图片。但是当我使用命令来转换所有的图片时,显示出以下错误信息:mogrify.im6: 无法打开图片 ``*.png':没有这个文件或目录 @ error/blob.c/OpenBlob/2638.``mogrify.im6: 无法打开文件 ``*.png' @ error/png.c/ReadPNGImage/3667. - opu 웃
您需要先进入该目录,使用命令 cd。如果文件在桌面上,请先运行 cd ~/Desktop 命令,然后再尝试转换。 - Parto
我改变了目录 - opu 웃
@Parto 我认为应该是 mogrify -format png *.jpg。楼主正在询问如何将 jpg 转换为 png。 - Glutanimate
对我来说,在14.04版本上没有起作用。 @Parto - talha06
@talha06 你遇到了什么错误? - Parto
抱歉,是我的错误。这是一个权限问题。我可以确认它按预期工作。 - talha06
为什么第一个命令有效而第二个命令无效?find . -name '*.png' -exec mogrify -format -quality 100 jpg *.png {} +和第二个命令... find . -name '*.png' -exec convert -units PixelsPerInch -density 300 -quality 100 jpg *.png {} + - Estatistics

首先,转换工作完成了。你不需要测试它。其次,一个Bash一行命令可以满足需求:
$ for file in Ground*jpg; do { \
  echo "Converting $file to `echo $file|cut -d. -f1`.png" ;\
  convert $file `echo $file|cut -d. -f1`.png ; } done

摇滚它老派的风格 ;)
干杯

我知道这个问题已经存在很长时间了,但是有一个非常棒的软件没有被提到,我经常使用。

http://photobatch.wikidot.com/ 也称为Phatch。它可以将任何图像格式转换成其他任何图像格式。虽然它已经有一段时间没有更新了,但现在声称已经发布了ubuntu 17.10版本。试试看吧,我相信你会非常满意。


2我试着下载这个软件,但上面的链接中缺少.deb文件的“下载”链接,而且Ubuntu的“商店”版本给了我以下错误信息: 包管理器的详细错误如下: apt交易返回结果为exit-failed 可能是Ubuntu v18.10的问题吧?总之,这是我的经历。 - Craig Lambie