Проблема в том, как выполнить обработку изображений для некоторых изображений — Ошибка: ошибка атрибута: объект типа «Изображение» не имеет атрибута «открыть

#python #image-processing

#python #обработка изображений

Вопрос:

Я получаю ошибку при выполнении обработки изображений для некоторых изображений с использованием python. Ошибка заключается в:

«Ошибка атрибута: объект типа «Изображение» не имеет атрибута «открыть»».

Я был бы рад, если вы сможете просмотреть приведенный ниже код и помочь мне исправить эту ошибку.

 #imprint text on image 

from PIL import Image

from PIL import ImageFont

from PIL import ImageDraw

from IPython.display import Image

list2 = ['mydata/marketst670503.jpg','mydata/marketst8407.jpg','mydata/potsdamriot6805.jpg','mydata/rescue671221a.jpg']

outfile = 'sample-text.jpg'


for line in list2:

    print (line)

    img = Image.open(line)

    draw = ImageDraw.Draw(img)

    # font = ImageFont.truetype(<font-file>, <font-size>)

    font = ImageFont.truetype("Colombia.ttf", 200)

    draw.text((0, 0),"Sample Text",(255,0,0),font=font)

    img.save(outfile)

    display(Image(filename=outfile))
    
  

Комментарии:

1. Вы импортируете два модуля с одинаковым именем «из IPython.display import Image», «из PIL import Image», что может вызвать проблемы.

Ответ №1:

Внимание! у вас есть 2 импорта с одинаковым ИМЕНЕМ, переопределяющие друг друга. Я бы внес это изменение:

 #mabe you replace the original import to a more nutral name..
import PIL.Image as Image

from PIL import ImageFont

from PIL import ImageDraw

from IPython.display import Image as DisplayImage # this line fixes your problem

list2 = ['mydata/marketst670503.jpg','mydata/marketst8407.jpg','mydata/potsdamriot6805.jpg','mydata/rescue671221a.jpg']

outfile = 'sample-text.jpg'

for line in list2:

    print (line)

    img = Image.open(line)

    draw = ImageDraw.Draw(img)

    # font = ImageFont.truetype(<font-file>, <font-size>)

    font = ImageFont.truetype("Colombia.ttf", 200)

    draw.text((0, 0),"Sample Text",(255,0,0),font=font)

    img.save(outfile)

    display(Image(filename=outfile))
  

и в следующий раз не путайте себя! выберите более простое имя, чем изображение, и дубликатов не будет 🙂

*** Отредактировано!***

Комментарии:

1. После того, как я запустил код, я получил эту ошибку «ImportError: не удается импортировать имя «‘DisplayImage'». Я попытался установить пакет «DisplayImage», но он не работает. У вас есть идея, как исправить эту ошибку?

2. @Elwakdy Я думаю, вам лучше сделать «из IPython.display импортировать изображение как DisplayImage», а затем DisplayImage(filename …) вместо display(Image(filename …))). поскольку я не думаю, что модуль имеет метод DisplayImage. По крайней мере, я не смог найти это в документации

3. Эй, я допустил глупую ошибку, спасибо! Обратите внимание на редактирование, я хотел, чтобы вы импортировали изображение и НАЗВАЛИ его DisplayImage, используя ключевое слово ‘as’. Теперь каждый раз, когда вы хотите использовать Изображение, полученное из Ipython. Библиотека отображения, используйте это имя.