OSError: [Errno 22] Invalid argument: 'https://ie.wampi.ru/2022/02/14/siteblank7f4f9eb1e7d2c454.png'
Код должен выполнить процедуру - взять фото с интернета и с помощью PIL ее отредактировать, в коде проблем нет, кроме как получения этой самой фотографии.
Не могли бы вы мне помочь, спасибо.
Мой код:
def montage_doc_site(text_1):
image = Image.open('https://ie.wampi.ru/2022/02/14/siteblank7f4f9eb1e7d2c454.png')
font = ImageFont.truetype('arial.ttf', 12)
font_color = (255, 255, 255)
position_1 = (580, 377)
drawing = ImageDraw.Draw(image)
drawing.text(position_1, text_1, font=font, fill=font_color)
return image
Ошибка:
OSError: [Errno 22] Invalid argument: 'https://ie.wampi.ru/2022/02/14/siteblank7f4f9eb1e7d2c454.png'
Ответы (2 шт):
Данная функция ищет файлы на локальном устройстве, вы указали внешнюю ссылку для протокола HTTP, автор данной библиотеки не мог и не должен был предусмотреть такой вариант.
Image.open принимает или путь к локальному файлу, или файловый объект. А функция urlopen как раз возвращает файловый объект
Пример:
from PIL import Image
from urllib.request import urlopen
image = Image.open(urlopen('https://ie.wampi.ru/2022/02/14/siteblank7f4f9eb1e7d2c454.png'))
print(image.size)
# (1364, 768)
image.show()
Модуль io содержит классы, которые реализуют API файловых объектов, поэтому если есть массив байт его можно обернуть в BytesIO и тот будет вести себя как файл, но в памяти.
Скачаем файл, получив массив байт, обернем в BytesIO:
from io import BytesIO
import requests
from PIL import Image
rs = requests.get('https://ie.wampi.ru/2022/02/14/siteblank7f4f9eb1e7d2c454.png')
image = Image.open(BytesIO(rs.content))
print(image.size)
# (1364, 768)