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 шт):

Автор решения: videx

Данная функция ищет файлы на локальном устройстве, вы указали внешнюю ссылку для протокола HTTP, автор данной библиотеки не мог и не должен был предусмотреть такой вариант.

→ Ссылка
Автор решения: gil9red

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)
→ Ссылка