如何将目录中的所有图像转换为 jpg?

如何将目录中的所有图像转换为 jpg?

我在一个目录中有如此多具有连续名称的不同图像,1 2 3 4 ...我想知道是否可以将它们所有转换为jpg900x900 并将它们调整大小而不保留纵横比。

我第一部分尝试的是:

$ mogrify -format jpg -- *

但是当我这样做时,内存使用量会迅速增加,然后进程就会被终止。 我尝试调整大小的是:

$ mogrify -resize 900x900 -- *
mogrify: insufficient image data in file `109.jpg' @ error/jpeg.c/ReadJPEGImage/1039.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.

正如我所说,文件的名称是连续的数字。我还有以下内容:

$ file * | grep -Po "^\d*: *\K[^:,]*(?=,)" | sort | uniq
ASCII text
GIF image data
JPEG image data
PNG image data

那么问题是什么?我该如何解决?

答案1

我建议使用convertImageMagick 的工具:

convert input.png -resize 900x900 output.jpg

-resize选项应该非常明显,并且使用其文件扩展名自动确定输出文件格式。

要对当前目录中的所有文件运行此命令,请尝试以下操作:

for inputfile in ./* ; do
    outputfile="${inputfile%.*}.jpg"
    convert "$inputfile" -resize 900x900 "$outputfile" &&
    [[ -e "$outputfile" && "$inputfile" != "$outputfile" ]] && rm "$inputfile"
done

这将从当前目录中获取所有文件(无论文件类型如何),并为每个输入文件创建相应的输出文件名,方法是删除旧扩展名并添加“.jpg”。然后它使用convert如上所述的方法调整图像大小并转换图像,这将创建一个新文件并保留原始文件。如果成功(&&),请检查输出文件是否存在以及输入文件名是否与输出文件名不同(例如,如果其中一个原始文件已经是 jpg)。现在,如果满足这些条件,我们假设我们可以删除输入文件。

相关内容