我的服务器上有一个巨大的 12GB 画廊,各个子文件夹中充满了图像。这些文件太大,无法以全分辨率使用。我需要将所有图像的大小调整为 820 像素宽(保持比例)。所以我的问题是 - 如何创建某种爬行脚本来调整所有大于 820px 的图像大小并将它们保存回覆盖原始文件?
希望你能帮助我:-) 提前谢谢你。
答案1
ImageMagick 工具convert
或mogrify
将完成这项工作。
您可以通过包管理器或源/rpm 获取它们这里。
基本用法(会覆盖原文件):
$ mogrify -resize 820x ./*.jpg
如果需要递归:
find . -name '*.jpg' -execdir mogrify -resize 820x {} +
答案2
该脚本将.png
文件夹中的所有文件大小调整为 30%。原始文件可以被删除(如果delete_original
是true
),也可以保留,在这种情况下,调整大小的文件将获得名称后缀rename_postfix
:
#!/bin/bash
rename_postfix="-small"
delete_original=true
substr=".png"
for str in *.png; do
#reverse strings
reverse_str=$(echo $str | rev)
reverse_substr=$(echo $substr | rev)
#find index of reversed substring in reversed string
prefix=${reverse_str%%$reverse_substr*}
reverse_index=${#prefix}
#calculate last index
index=$(( ${#str} - ${#substr} - $reverse_index ))
# Extract the filename without extension
filename="${str:0:index}"
if $delete_original; then
# the name can remain, because the original will be removed
new_filename="${str}"
else
# need a new name, two files will remain
new_filename="${filename}${rename_postfix}${substr}"
fi
echo "extension = ${substr}, original = ${str}, filename = ${filename}, new = ${new_filename}"
# Resize and convert the file to .jpg
convert -resize 30% "${str}" "${new_filename}"
done
我认为您应该能够使用上述主体编写一个函数,该函数将接受目录参数等(如果您想让它进入子文件夹)
该convert
函数来自imagemagick
库:
sudo apt install imagemagick