Не округляется фото с помощью библиотеки pillow
Я хочу сделать, что то наподобие карточки пользователя при помощи дискорд бота. Основная суть, это я хочу что бы на карточке был круглый аватар пользователя. Вот код команды
@bot.command()
async def png(ctx):
imag=Image.open("large.png")# Это фоновое изображение
img=imag.resize((1162, 648))# Размеры фона
url=str(ctx.author.avatar)# Находим аватар автора
response=requests.get(url, stream=True)
response=Image.open(io.BytesIO(response.content))
response=response.convert("RGBA")# Переводим автар в RGBA
response=response.resize((400, 400), Image.ANTIALIAS)# Устанавляваем для автара размеры
size=(400, 400)# Размеры маски
mask=Image.new("L", size, 0)# Создание маски
draw=ImageDraw.Draw(mask)# Рисуем маску
draw.ellipse((0, 0) + size, fill=255)# Размеры и цвет маски для альфа канала
output=ImageOps.fit(response, mask.size, centering=(0.5, 0.5))# Центрируем маску на аватар
output.putalpha(mask)# Накладываем альфа канал на маску
output.save("output.png")# Сохраняем обрезанный аватар по маске
output2=Image.open("output.png")# Открываем снова аватар (уже обрезанный)
output2=output2.convert("RGBA")# Переводим в RGBA
img.paste(output2, (700, 50))# Устанавливаем расположение аватара на фоне
idraw=ImageDraw.Draw(img)# Соединяем фон и аватар
name=ctx.author.name# Не важно
tag=ctx.author.discriminator# Не важно
headline=ImageFont.truetype("a_AssuanTitulStrDs.ttf", size=60)# Не важно
undertext=ImageFont.truetype("a_AssuanTitulStrDs.ttf", size=35)# Не важно
idraw.text((470, 500), f"{name}", font=headline)# Не важно
idraw.text((470, 548), f"Welcome", font=undertext)# Не важно
img.save("user_card.png")# Сохраняем полноценную картинку со всеми изминениями
await ctx.send(file=disnake.File(fp="user_card.png"))# Выкладываем фото в чат
Команда работает, но не обрезает аватар по кругу. Вот сама фотокарточка, что команда выдает в конечном итоге.
При чем, при сохранении аватара на компьютер, он его обрезает так как надо и при открытии фотографии, она отображается корректно, но в промежутке между открытием аватара по коду и связывания его с фоном, аватар каким то образом опять становится квадратным, как на фото сверху.
Источник: Stack Overflow на русском