仅将大图像调整为小图像,而不改变高宽比

仅将大图像调整为小图像,而不改变高宽比

我有一个文件夹,里面有 PNG 和 JPEG 格式的彩色图像。在 Linux 中使用时file,我可以看到 PNG 图像PNG image data, ... x ..., 8-bit/color RGBA, non-interlaced的高度和宽度都是不同的。而 JPEG 图像都是JPEG image data, JFIF standard 1.01。它们的大小最多可达500KB

我可以用来find . -type f -size +10k -exec ls -l {} \;列出所有尺寸大于的图像10Kb

我还可以用来convert input.png -geometry x150 output.png调整一张图片的高度而不150px改变高度/宽度比。或者mogrify -geometry x150 *调整文件夹中所有图像的大小。

有人知道如何结合这两个命令吗调整所有尺寸大于10Kb在文件夹中?

答案1

为什么不执行来自 find 的转换?

find . -type f -size +10k -exec convert {} -geometry x150 {}.png \;

您需要将rename文件转换为*.pic.png有用的内容。但它应该可以工作。

答案2

我假设当前目录中只有图片文件。如果没有,你可以指定两个命令,一个带有-name "*.jpg",一个带有-name "*.png"

尝试使用此命令来查看选择了哪些文件(避免破坏要保留的文件),

find . -type f -name "*" -size +10k -exec echo mogrify -geometry x150 {} \;

如果可以的话,删除echo使用此命令来缩小太大的文件

find . -type f -name "*" -size +10k -exec mogrify -geometry x150 {} \;

可能10k尺寸不匹配-geometry x150,所以要根据图片的种类进行修改。

答案3

这将创建一个包含您调整大小后的图像的文件夹,并且不会触及原始文件,并将调整大小后的图像放在那里。

这将保留您的原始图像,如果您对新调整大小的图像感到满意,您可以替换它。

#!/bin/bash

[ ! -d resized ] && mkdir resized

while read image; do
    echo "Resizing [$image] to [resized/$image]"
    convert $image -geometry x150 "resized/$image"
done < <(find . -type f -size +10k -exec ls {} \;)

相关内容