Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调整目录中的图像大小_Python_Perl_Image_Resize_Image Scaling - Fatal编程技术网

Python 调整目录中的图像大小

Python 调整目录中的图像大小,python,perl,image,resize,image-scaling,Python,Perl,Image,Resize,Image Scaling,我有一个目录的图像,我想调整到大约60%的原始大小满 我该怎么做呢?可以是Python或Perl 干杯 Eef我将Python与PIL(Python图像库)一起使用。当然,有专门的程序来实现这一点 许多人使用PIL来处理这些事情。看看: PIL非常强大,最近我发现了以下配方: 使用,它是一个流行的命令行工具套件的接口,用于完成这类工作。也可用。您需要调整它的大小,还是通过编程方式调整大小? 如果只是调整大小,请使用PixResizer 使用mogrify,它是我们的一部分,怎么样?如果您确实需要

我有一个目录的图像,我想调整到大约60%的原始大小满

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

干杯

Eef

我将Python与PIL(Python图像库)一起使用。当然,有专门的程序来实现这一点

许多人使用PIL来处理这些事情。看看:

PIL非常强大,最近我发现了以下配方:

使用,它是一个流行的命令行工具套件的接口,用于完成这类工作。也可用。

您需要调整它的大小,还是通过编程方式调整大小?
如果只是调整大小,请使用PixResizer

使用mogrify,它是我们的一部分,怎么样?如果您确实需要从Perl控制它,那么您可以使用,或者。

它可以在shell中吗

mkdir resized
for a in *.jpg; do convert "$a" -resize 60% resized/"$a"; done
如果您有>1个core,可以这样做:

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…-为了安全起见,如果调整大小失败(无论出于何种原因)。

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

我不确定。首先,它并没有说这是一次性的工作。第二,“Irfan视图”可能不是一个选项-例如,由于操作系统的限制。第三,ImageMagick是如此复杂,甚至将其用作批处理工具也是一种编程。感谢这一点,这正是我想要的。