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



这是我测试欢迎卡并将其放入事件中的测试命令。但我在调整用户头像的大小时遇到了一个错误,这就是错误:命令抛出了一个异常:ValueError:图像不匹配。

@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'))

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

@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 = avatar_image.resize((128, 200)) 
circle_image = Image.new('L', (128, 128))

刚好在circle_image的大小值中放入avatar_image.size:

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

相关内容

最新更新