Ошибка при считывании и обработке изображения полученного через requests.get().content | UnicodeDecodeError: и AttributeError: |


Описание проблемы:

Всех приветствую!
Столкнулся со следующим, когда получаю изображение через requests.get().content
и пытаюсь дальше обработать изображение, выдаёт ошибки которые описал внизу.
Прошу помочь, перепробовал уже много вариантов.


Основной код

Я думаю что проблема в первых двух строчках

#image: получает ссылку на изображение
#rad: получает int число

    def add_corners(image, rad):  
        img = requests.get(image, 'r', verify=True).content
        im = Image.open(img)
        circle = Image.new('L', (rad * 2, rad * 2), 0)
        draw = ImageDraw.Draw(circle)
        draw.ellipse((0, 0, rad * 2, rad * 2), fill=255)
        alpha = Image.new('L', im.size, 'white')
        w, h = im.size
        alpha.paste(circle.crop((0, 0, rad, rad)), (0, 0))
        alpha.paste(circle.crop((0, rad, rad, rad * 2)), (0, h - rad))
        alpha.paste(circle.crop((rad, 0, rad * 2, rad)), (w - rad, 0))
        alpha.paste(circle.crop((rad, rad, rad * 2, rad * 2)), (w - rad, h - rad))
        im.putalpha(alpha)
        return im

Вывод в консоль:

File "---путь к файлу---", line 29, in add_corners
im = Image.open(img)
File "---путь к библиотеке---\PIL\Image.py", line 3068, in open
fp = builtins.open(filename, "rb")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte


Попытки решения:

Решил обойти таким путем:
im = requests.get(image, 'rb', verify=True).content
Получил следующую ошибку:
File "D:\APP-PDF\APP-PDF\Generator_PDF.py", line 32, in add_corners
alpha = Image.new('L', im.size, 'white')
AttributeError: 'bytes' object has no attribute 'size'


P.S. Если пробовать открывать файл через:
Image.open('image.png')
то работает код как нужно, если файл есть в директории.


Ответы (1 шт):

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

Вот прямо из документации библиотеки requests пример, как нужно открывать изображение, полученное через запрос:

from PIL import Image
from io import BytesIO

i = Image.open(BytesIO(r.content))

У вас получается, что в Image.open(img) содержание img воспринимается как имя файла, поэтому выходят такие ошибки.

→ Ссылка