Проблема обрезки изображений с помощью pillow и discord.py

#python #image #discord #python-imaging-library #discord.py

#python #изображение #Discord #python-imaging-library #discord.py

Вопрос:

В настоящее время я пытаюсь создать команду для своего бота, которая показывает карточку ранга для пользователя. Я успешно получил их имя и pfp на карточке, но столкнулся с проблемами, пытаясь обрезать pfp, чтобы он был круглым. Вот мой код:

 @bot.command()
async def checkrank(ctx, user: discord.Member = None):
  if user == None:
    user = ctx.author
  
  image = Image.open('Levels.png')
  
  titlefont = ImageFont.truetype('Poppins-SemiBold.ttf', 60)

  draw = ImageDraw.Draw(image)

  asset = user.avatar_url_as(size=128)
  data = BytesIO(await asset.read())
  pfp = Image.open(data)
  mask = Image.open(data).convert('L')
  pfp = pfp.resize((100,100))

  output = ImageOps.fit(pfp, mask.size, centering=(0.5, 0.5))
  output.putalpha(mask)

  title = f'{user.name}'

  image.paste(pfp,(70,70))
  draw.text((200, 80), title, (0,0,0), font=titlefont)
  image.save('levelout.png')
  

Когда я запускаю команду, все работает нормально, и я не получаю никаких сообщений об ошибках, но изображение остается квадратным и не обрезается. Раньше я успешно внедрял изображения с круговой обрезкой в команды, поэтому я не совсем уверен, что я здесь путаю. Любая помощь будет оценена.

Ответ №1:

Я думаю, что ваша проблема заключается в строке вашего кода.

 pfp = pfp.resize((100,100))
  

Как вы сказали, это даст вам квадратную форму, потому что 100 на 100 имеют одинаковые размеры, а квадраты имеют одинаковые стороны. Может быть, если вы измените здесь цифры, размер вашего изображения будет изменен?

 image.paste(pfp,(70,70))
  

Опять же, насколько мне известно, это снова сделало бы его квадратным, так что, возможно, поиграйте и с этими числами.

Если вам нужна дополнительная помощь, не стесняйтесь отвечать.