调整目录中的图像大小

时间:2009-06-26 11:37:33

标签: python perl image resize image-scaling

我有一个充满图像的目录,我想将其调整为原始大小的60%左右。

我该怎么做呢?可以是Python或Perl

干杯

EEF

6 个答案:

答案 0 :(得分: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)

答案 1 :(得分:11)

如何使用mogrify,ImageMagick的一部分?如果你真的需要从Perl控制它,那么你可以使用Image::MagickImage::ResizeImager

答案 2 :(得分: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 ... - 如果调整大小(无论出于何种原因)失败,只是为了安全起见。

答案 3 :(得分:2)

使用PerlMagick,它是流行的ImageMagick命令行工具套件的接口,可以完成这类工作。 PythonMagic也可用。

答案 4 :(得分:1)

我使用Python和PIL(Python图像库)。当然,有专门的程序可以做到这一点。

很多人使用PIL来做这些事情。请看:Quick image resizing with python

PIL非常强大,最近我找到了这个食谱: Putting watermark to images in batch

答案 5 :(得分:0)

你需要调整大小,还是想以编程方式调整大小? 如果只是调整大小使用PixResizer。 http://bluefive.pair.com/pixresizer.htm

相关问题