【问题标题】:Resize images in directory调整目录中的图像大小
【发布时间】:2010-11-06 03:02:44
【问题描述】:

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

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

干杯

伊夫

【问题讨论】:

  • 我不确定。首先 - 它并没有说这是一次性工作。第二 - “Irfan View”可能不是一个选项 - 例如由于操作系统限制。第三 - ImageMagick 非常复杂,即使将其用作批处理工具也是一种编程。

标签: python perl image resize image-scaling


【解决方案1】:

如果您想以编程方式进行,我假设是这种情况,请使用 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)

【讨论】:

    【解决方案2】:

    可以装在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】:

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

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

    PIL 非常强大,最近我发现了这个配方: Putting watermark to images in batch

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          使用PerlMagick,它是流行的ImageMagick 命令行工具套件的接口,用于执行此类操作。 PythonMagic 也可用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-08-22
            • 2021-08-23
            • 2019-07-28
            • 2013-02-07
            • 1970-01-01
            • 2021-07-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多