Python枕头:将多个滤镜和增强功能应用于一张图像

时间:2019-01-06 08:35:59

标签: python python-3.x image python-imaging-library

我想对上传的图片应用一些过滤器。过滤器是根据用户输入的文本生成的。该函数到目前为止的外观:

    def validate_email(self):
    textboxValue = self.lineEdit.text()
    image = self.open()
    for c in textboxValue:
        if c == 'a':
            image = image.filter(ImageFilter.GaussianBlur(1.05)).show()
        elif c == 'b':
            image = ImageEnhance.Brightness(image)
            image.enhance(1.1).show()
        elif c == 'c':
            image = ImageEnhance.Contrast(image)
            image = image.enhance(1.1).show()
        elif c == '@':
            image = ImageOps.grayscale(image).show()
        else:
            print(c)

我很确定昨天我的代码可以正常工作,但是今天我不断收到错误

  

AttributeError:对象没有属性...

和“ ...”不同,有时是增强,有时是 getbands 等。 始终是导致错误的 ImageEnhance 部分。 GaussianBlur 过滤器工作正常。 我读到有关that解决方案的信息,但这对我没有帮助。我认为它太旧了。

我是Python的新手,所以也许我犯了一些基本的错误。如果有人可以帮我,我会很高兴!

1 个答案:

答案 0 :(得分:1)

Image.show()方法不会返回图像。

实际上,高斯模糊滤镜也有同样的问题,但是它是从新图像开始的。

只需将show方法调用分开,就可以了。

def validate_email(self):
    textboxValue = self.lineEdit.text()
    image = self.open()
    for c in textboxValue:
        if c == 'a':
            image = image.filter(ImageFilter.GaussianBlur(1.05))
            image.show()
        elif c == 'b':
            e = ImageEnhance.Brightness(image)
            image = e.enhance(1.1)
            image.show()
        elif c == 'c':
            e = ImageEnhance.Contrast(image)
            image = e.enhance(1.1)
            image.show()
        elif c == '@':
            image = ImageOps.grayscale(image)
            image.show()
        else:
            print(c)