使用for循环在PIL上打开多个图像

时间:2019-03-31 22:44:27

标签: python for-loop variables data-structures python-imaging-library

我必须用PIL打开几个图像。现在,我只有3张图片,所以我一直在像这样打开它们,而不是在for循环中:

self.redpic = Image.open("red.png")
self.redpic = self.redpic.resize((100,100), Image.ANTIALIAS)
self.img1 = ImageTk.PhotoImage(self.redpic)

但是将来,我将至少打开20张图像,因此我尝试了for-loop实现:

def process_image(self):
    for valx in range(5):
        self.numbering = "image" + str(valx);
        self.numbpng = numbering + ".png";
        self.numbering = Image.open(numbpng);
        self.numbering = self.numbering.resize((100,100), Image.ANTIALIAS)
        self.numbering= ImageTk.PhotoImage(self.numbering)

但是,与此同时,我无法访问刚刚创建的图像。我一直在阅读有关动态创建变量的知识,以及不建议如何使用它,因此,我想知道什么是最好的方式来访问self.imagex,其中x是图像的数字。我知道图像的数量提前。

1 个答案:

答案 0 :(得分:0)

避免动态创建变量的一种常见方法是将项目存储在某种大小可变的容器中,例如tuplelistdict等。

以下是将它们存储在名为list的类实例属性中的示例:

self.images

调用该方法后,您可以像这样引用单个图像:

from PIL import Image, ImageTk

class Class:
    def process_images(self, num_images):
        self.images = []
        for i in range(num_images):
            image_filename = "image%s.png" % i
            number_img = Image.open(image_filename).resize((100, 100), Image.ANTIALIAS)
            number_img = ImageTk.PhotoImage(number_img)
            self.images.append(number_img)

c = Class()
c.process_images(5)