我知道在命令行上调整图像大小是ImageMagick和类似的事情,不幸的是,我只有非常基本的bash脚本能力,所以我想知道这是否可能:
谢谢您的意见。
发布于 2020-03-24 06:14:43
即使对高级用户来说,实现也不是那么简单。作为一条单线:
find \ # 1
~/Downloads \ # 2
-type f \ # 3
-exec file \{\} \; \ # 4
| awk -F: '{if ($2 ~/image/) print $1}' \ # 5
| while IFS= read -r file_path; do \ # 6
mogrify -resize 1024x1024\> "$file_path"; \ # 7
done # 8
第1-4行是对find
命令的调用:
file
命令。每个文件的示例输出:- `/Downloads/391A6 625.png: PNG image data, 1024 x 810, 8-bit/color RGB, interlaced`
- `/Downloads/STRUCTURED NODES IN UML 2.0 ACTIVITES.pdf: PDF document, version 1.4`
注意文件名是如何由:
从其信息中分隔的,关于PNG的信息包含image
单词。对于其他图像格式也是如此。
awk
只过滤那些在其信息中包含image
字的文件。这只给我们图像文件。在这里,-F:
指定分隔符为:
。这为我们提供了变量$1
,它包含原始文件名和文件信息的$2
。我们搜索image
字文件信息和打印文件名,如果它是存在的。awk
的输出,并调用mogrify
命令来调整图像大小。在这里,我们不使用管道和xargs
,就好像文件路径包含必须转义的空格或其他字符一样,我们将得到xargs unterminated quote
错误,这是一个痛苦的处理。mogrify
命令ImageMagic。与convert
不同的是,mogrify
在不创建新文件的情况下改变了文件。在这里,1024x1024\>
告诉调整图像的大小,使其具有1024x1024
的最大大小。\>
部分告诉我们要保持高宽比,这样最终的图像就会有1024 of的最大一面。除非原始图像是方形的,否则另一边会比那个小。注意;
,因为它需要内部循环。注意,在同一个文件上运行几次mogrify
是安全的:如果文件的大小已经与目标维度相对应,则不会再次调整大小。但是,它将改变文件的修改时间。
此外,您可能不仅需要调整图像的大小,而且还需要压缩它们。请参考我的要点看看如何做到这一点:https://gist.github.com/oblalex/79fa3f85f05924017d25004496493adb
如果您的目标只是缩小大图像的大小,例如大于300 K,您可以:
find /path/to/dir -type f -size +300k
mogrify -strip -interlace Plane -format jpg -quality 85 -define jpeg:extent=300KB "$FILE_PATH"
结合起来在这种情况下,将为非jpg
原始文件创建新的jpg
文件,并且需要删除原始文件。参考要点,看看如何做到这一点。
发布于 2018-01-29 11:12:36
您可以通过在目录上循环bash脚本来做到这一点。您必须标识您想要的所有文件格式,如jpg和png等。然后,对于每个目录,循环遍历给定格式列表的每个文件。然后使用ImageMagick调整文件的大小。
cd
dirlist="path2/directory1 path2/directory2 ...."
for dir in $dirlist; do
cd "$dir"
imglist=`ls | grep -i ".jpg\|.png"`
for img in $imglist; do
convert $img -resize "200x200>" $img
done
done
请参阅https://www.imagemagick.org/script/command-line-processing.php#geometry
https://stackoverflow.com/questions/48503428
复制