#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. Библиотека отображения, используйте это имя.