我的文件夹中有一堆图像:
images/image1.jpg
images/image2.jpg
...
这些图像并未针对网络进行优化。
只是想知道是否存在一个 Linux 命令可以仅通过一个步骤批量优化这些图像?
更新:我需要为每张图片做两件事:
如果图像的宽度大于 900px,则将宽度减小到 900px(保持比例)
以较低的质量保存文件,比如说原始文件的 70%。
答案1
安装图像魔术师:
sudo apt-get install imagemagick
并使用convert
以下命令:
mkdir new
for file in images/*jpg
do convert -quality 70% -resize '>900x' "$file" new/$(basename "$file")
done
答案2
如果您有很多文件,并且想要快速完成此操作,您也可以使用并行程序:
sudo apt install imagemagick parallel
然后是以下内容:
find . \( -name '*.jp*g' -o -name '*.png' \) -a ! -name '*.min.*' -type f -print0 | \
parallel -0 'convert {} -resize '>900x' -quality '70%' \
-set filename:newname "%d/%[basename].min.%[extension]" "%[filename:newname]"'
让我们来看一下:
find
-- 查找文件.
-- 在当前目录中\( -name '*.jp*g' -o -name '*.png' \)
— 要么是 png 要么是 jpeg(“jpg”和“jpeg”都是常见的扩展名!)-a ! -name '*.min.*'
-- 并跳过已最小化的文件-type f
——是实际的文件,而不是符号链接或名称奇怪的目录-print0
-- 打印这些文件并用空字节分隔(这样空格就不会破坏内容)
parallel
-- 从上一个命令读取并针对每个元素并行执行该命令-0
-- 每个元素用空字节分隔convert {}
-- 调用 imagemagick “convert” 程序,并将文件名替换为{}
resize '>900x' -quality '70%'
-- 将图像大小调整为 x 轴上的最大 900px,并将 jpeg 质量更改为 70%。有许多这里有其他可能的选择。-set filename:newname "%d/%[basename].min.%[extension]"
——用新文件名创建一个变量。请参阅文档以了解所有有效值。%d
-- 文件所在的目录%[basename]
-- 不带任何扩展名的文件名%[extension]
-- 文件的原始扩展名
"%[filename:newname]"
-- 我们在上一步中设置的输出文件名