Ошибка при считывании и обработке изображения полученного через 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 шт):
Вот прямо из документации библиотеки requests пример, как нужно открывать изображение, полученное через запрос:
from PIL import Image
from io import BytesIO
i = Image.open(BytesIO(r.content))
У вас получается, что в Image.open(img) содержание img воспринимается как имя файла, поэтому выходят такие ошибки.