命令引发异常:ValueError:图像不匹配

2024-05-17 08:22:12 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我做的一个测试命令,用于测试欢迎卡,然后将其放入事件中。但是我在调整用户头像的大小时遇到了一个错误,这就是错误:该命令引发了一个异常:ValueError:Images not match

 @commands.command()
 async def proof(self, ctx, member: discord.Member):
   img = Image.open("img/cardwelcome.png")

   avatar_asset =  member.avatar_url_as(size = 4096)
   buffer_avatar = io.BytesIO(await avatar_asset.read())
   avatar_image = Image.open(buffer_avatar)
   avatar_image = avatar_image.resize((128, 200)) 
   circle_image = Image.new('L', (128, 128))
   circle_draw = ImageDraw.Draw(circle_image)
   circle_draw.ellipse((0, 0, 128, 128), fill=255)
   img.paste(avatar_image, (490, 140), circle_image)
   img.save("cardwelcome2.png")
   await ctx.send(file=discord.File(r'img/cardwelcome2.png'))

我也有我正在测试的其他代码,但是我不知道如何在这里添加resize,如果有人知道如何在这里添加它或者如何在其他代码中修复它,我将非常感激:

  @commands.command()
  async def proof2(self, ctx, member: discord.Member):
    welcome = Image.open('img/cardwelcome.png')
    
    asset = member.avatar_url_as(size = 128)
    data = BytesIO(await asset.read())
    img=Image.open(data).convert("RGB")
    npImage=np.array(img)
    h,w=img.size
    
    alpha = Image.new('L', img.size,0)
    draw = ImageDraw.Draw(alpha)
    draw.pieslice([0,0,h,w],0,360,fill=255)
    npAlpha=np.array(alpha)
    npImage=np.dstack((npImage,npAlpha))
    pfp = Image.fromarray(npImage)
    welcome.paste(pfp, (490, 140), alpha)
    welcome.save("img/cardwelcome2.png")
    await ctx.send(file=discord.File(r'img/cardwelcome2.png'))

Tags: imageimgsizepngopenassetawaitmember
1条回答
网友
1楼 · 发布于 2024-05-17 08:22:12

图像的模式不同,大小也不同

 @commands.command()
 async def proof(self, ctx, member: discord.Member):
   img = Image.open("img/cardwelcome.png")

   avatar_asset =  member.avatar_url_as(size = 4096)
   buffer_avatar = io.BytesIO(await avatar_asset.read())
   avatar_image = Image.open(buffer_avatar)
   avatar_image = avatar_image.resize((128, 200)) 
   circle_image = Image.new('L', (128, 128))
   circle_draw = ImageDraw.Draw(circle_image)
   circle_draw.ellipse((0, 0, 128, 128), fill=255)
   img.paste(avatar_image, (490, 140), circle_image)
   img.save("cardwelcome2.png")
   await ctx.send(file=discord.File(r'img/cardwelcome2.png'))

所以这里的图像应该是相同的,因为当你把它粘贴到另一个图像中时,你掩盖了阿凡达的图像。如果它们的大小不一样,图像就无法正确遮罩

   avatar_image = avatar_image.resize((128, 200)) 
   circle_image = Image.new('L', (128, 128))

仅在circle_image的size值中放入avatar_image.size:

   avatar_image = avatar_image.resize((128, 200)) 
   circle_image = Image.new('L', avatar_image.size)

相关问题 更多 >