【问题标题】:Pillow library in python Discord BOT doesn't recognise the .paste and .save functionspython Discord BOT 中的 Pillow 库无法识别 .paste 和 .save 函数
【发布时间】:2021-06-15 15:44:11
【问题描述】:

我正在寻找使用我的不和谐机器人和枕头 python 库制作自定义欢迎图像。 我不明白为什么这段代码不起作用。我要疯了……

(如果变量的名称有一些混淆,请不要担心,因为我之前必须翻译这段代码)

import discord
import datetime
import PIL
from PIL import Image, ImageFont, ImageDraw
from discord import client, message
from discord.ext import commands
from discord.utils import get

intents = discord.Intents.default()
intents.members = True
client = commands.Bot(command_prefix="!", intents=intents)
client.remove_command('help')


@client.event
async def on_member_join(member):
    await member.avatar_url.save('test.png')
    pfp_unresized = Image.open('test.png')
    pfp = pfp_unresized.resize((200, 200))

    graph = Image.open("graph.png")
    black_img = Image.open("Black_img.png")

    bannerpfp = black_img.paste(pfp, (400, 30))
    bannernotxt = bannerpfp.paste(graph, (0, 0))

    await bannernotxt.save('bannernotxt.png')

这是回溯:

Ignoring exception in on_member_join
Traceback (most recent call last):
  File "C:\users\yuppi\appdata\local\programs\python\python39\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "c:\Users\yuppi\Documents\Nico\Codici\PYTHON\Discord\DiscordBOT\DiscordBOT.py", line 33, in on_member_join
    bannernotxt = bannerpfp.paste(graph, (0, 0))
AttributeError: 'NoneType' object has no attribute 'paste'

希望你能帮助我。

【问题讨论】:

  • Image.paste 是一个 inplace 操作,它将更改 black 并返回 None
  • 也是black_img.paste 不是black.paste
  • @LukasThaler 你能解释一下吗?
  • @Ceres 是的,我知道,但我将所有变量都翻译成英文,所以可能有些名称不正确。
  • 调用black_img.paste(pfp, (400, 30)) 后,原来的black_img 变量包含修改后的图像。您不需要存储返回值,因为它始终是None,并且可以继续使用black_img。我稍后会添加一个概述这个想法的答案

标签: python image-processing discord discord.py python-imaging-library


【解决方案1】:

正如我在 cmets 中指出的,Image.paste 操作 就地,即它修改 现有 变量,而不是返回它的修改版本。此类函数的返回值始终为 None,因为没有返回任何内容。


对于您的具体情况,这意味着调用black_img.paste(pfp, (400, 30)) 将直接修改black_img。如果您在此调用之前和之后检查图像,您会发现它们是不同的。因此,将您的代码修改为以下内容应该会给您带来想要的结果:

@client.event
async def on_member_join(member):
    await member.avatar_url.save('test.png')
    pfp_unresized = Image.open('test.png')
    pfp = pfp_unresized.resize((200, 200))

    graph = Image.open("graph.png")
    black_img = Image.open("Black_img.png")

    black_img.paste(pfp, (400, 30))
    black_img.paste(graph, (0, 0))

    await black_img.save('bannernotxt.png')

【讨论】:

  • 非常感谢兄弟。我还有一个小问题,因为我看到枕头库不允许清晰的背景...有什么办法可以使这件事成为可能,或者我必须重塑图片?
  • Pillow 支持透明像素,但需要将文件转换为RGBA,如下所示:Image.open('filename.png').convert('RGBA')
猜你喜欢
  • 2023-01-22
  • 2018-08-15
  • 2022-07-12
  • 2021-11-10
  • 2020-08-15
  • 2019-03-05
  • 2021-12-27
  • 2022-11-16
  • 1970-01-01
相关资源
最近更新 更多