如何在这些条件下调整子文件夹中图像的大小?

如何在这些条件下调整子文件夹中图像的大小?

假设我有一个包含许多子文件夹的文件夹。每个子文件夹都包含许多图像。

我想在以下条件下调整每个子文件夹中的这些图像的大小:

  • 如果图像的高度小于 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

相关内容