假设我有一个包含许多子文件夹的文件夹。每个子文件夹都包含许多图像。
我想在以下条件下调整每个子文件夹中的这些图像的大小:
- 如果图像的高度小于 1000 像素,则进行注释。
- 如果图像的高度在 1001 到 2500 像素之间,请将其大小调整为 70%。
- 如果图像的高度在 2501 到 3000 像素之间,请将其大小调整为 50%。
- 如果图像的高度超过 3000 像素,请将其大小调整为 30%。
- 新图像取代旧图像。
通常我可以通过一张一张地查看图像的信息并使用 mogrify 命令来使用一些图像来完成此操作,但是这次我有太多的子文件夹。由于我是一个新的 Linux 用户,任何帮助将不胜感激。
答案1
我修改了代码贾乔提供并让它以这种方式工作:
MIN_RES=1001
MAX_RES=2500
RES11=2501
RES12=3000
RES21=3001
RES22=10000
for i in *.jpg; do
YRES=$(identify -verbose $i|grep Geometry: |cut -d 'x' -f2 |sed 's|+.*||g')
if [ $YRES -gt $MIN_RES ] && [ $YRES -lt $MAX_RES ]; then
echo "Found: $i with y-res: $YRES";
# convert
convert -resize 70% $i $i;
elif [ $YRES -gt $RES11 ] && [ $YRES -lt $RES12 ]; then
echo "Found: $i with y-res: $YRES";
convert -resize 50% $i $i;
else [ $YRES -gt $RES21 ] && [ $YRES -lt $RES22 ]
echo "Found: $i with y-res: $YRES";
convert -resize 30% $i $i;
fi
done
答案2
你会在这里找到:https://askubuntu.com/questions/1164/how-to-easily-resize-images-via-command-line有关 ImageMagick 提供的命令行工具的一些详细信息。
因此,要在单张图片上执行这项工作,我会:
使用identify工具读取图片的元数据,例如:
$ 识别 /tmp/p1.jpg /tmp/p1.jpg JPEG 1487x925 1487x925+0+0 8 位 sRGB 314106B 0.000u 0:00.000
解释输出以提取尺寸 1487x925
应用我的规则来构建转换命令。
基于“find”命令结果的循环将允许对一个或多个文件夹重复此操作。
答案3
您可以使用 ImageMagic 工具箱中的“识别”来读取图像分辨率,使用“转换”来转换图像。像这样的东西:
MIN_RES=100
MAX_RES=500
for i in *.jpg; do
YRES=$(identify -verbose $i|grep Geometry: |cut -d 'x' -f2 |sed 's|+.*||g')
if [ $YRES -gt $MIN_RES ] && [ $YRES -lt $MAX_RES ]; then
echo "Found: $i with y-res: $YRES";
# convert
convert -resize 50% $i $i;
fi
done