Python Pillow: применение нескольких фильтров и улучшений к одному изображению - PullRequest
0 голосов
/ 06 января 2019

Я хотел бы применить некоторые фильтры к загруженному изображению. Фильтры генерируются на основе текста, который вводится пользователем. Вот так выглядит функция:

    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 работает нормально .. Я читал о этом решении, но это не помогло мне. Я полагаю, он слишком старый ..

Я новичок в Python, поэтому, возможно, я сделал несколько основных ошибок. Буду рад, если кто-нибудь сможет помочь!

1 Ответ

0 голосов
/ 06 января 2019

Метод 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)
...