在目录中调整图像大小

6

我有一个图片目录,想将其中的图片缩小到原始大小的60%左右。

我该如何操作?可以用Python或Perl实现。

谢谢

Eef


我不确定。首先 - 它没有说这是一次性工作。其次 - "Irfan View" 可能不是一个选项 - 例如由于操作系统的限制。第三 - ImageMagick 是如此复杂,即使将其用作批处理工具也有点像编程。 - user80168
6个回答

17

如果你想以编程方式实现它,我假设是这种情况,可以使用PIL来调整大小,例如:

newIm = im.resize((newW, newH)

然后将其保存到同一文件或新位置。

递归地遍历文件夹并对所有图像应用缩放函数。

我想出了一个样本脚本,我认为它会适合您的需求。您可以在此基础上进行改进:例如使其成为图形化界面,添加更多选项,比如相同扩展名或所有png格式、调整采样线性/双线性等。

import os
import sys
from PIL import Image

def resize(folder, fileName, factor):
    filePath = os.path.join(folder, fileName)
    im = Image.open(filePath)
    w, h  = im.size
    newIm = im.resize((int(w*factor), int(h*factor)))
    # i am saving a copy, you can overrider orginal, or save to other folder
    newIm.save(filePath+"copy.png")

def bulkResize(imageFolder, factor):
    imgExts = ["png", "bmp", "jpg"]
    for path, dirs, files in os.walk(imageFolder):
        for fileName in files:
            ext = fileName[-3:].lower()
            if ext not in imgExts:
                continue

            resize(path, fileName, factor)

if __name__ == "__main__":
    imageFolder=sys.argv[1] # first arg is path to image folder
    resizeFactor=float(sys.argv[2])/100.0# 2nd is resize in %
    bulkResize(imageFolder, resizeFactor)

11

10

可以用shell实现吗?

mkdir resized
for a in *.jpg; do convert "$a" -resize 60% resized/"$a"; done

如果您有 > 1 个核心,可以这样做:

find . -maxdepth 1 -type f -name '*.jpg' -print0 | xargs -0 -P3 -I XXX convert XXX -resize 60% resized/XXX

-P3 表示您想同时调整大小最多 3 张图像(并行处理)。

如果您不需要保留原始文件,可以使用 mogrify,但我更喜欢使用 convert,然后 rm ...; mv ... - 这样做是为了安全起见,以防调整大小失败(出于任何原因)。


2

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接