Discord.py调整头像尺寸后调用tobytes()报不支持图片类型错误
解决调整头像尺寸后Discord提示“不支持的图片类型”问题
问题原因
- 直接调用
pilImage.tobytes()返回的是原始像素数据,不包含图片格式的文件头信息,Discord无法识别这种裸数据的图片类型。 Image.ANTIALIAS已被废弃,需要替换为Image.LANCZOS(或Resampling.LANCZOS,根据Pillow版本)。
修复后的代码
将原代码最后两行替换为以下内容:
# 替换废弃的ANTIALIAS为LANCZOS,统一转换为RGBA格式 pilImage = pilImage.resize((250, 250), Image.LANCZOS).convert("RGBA") # 将调整后的图片保存为带格式头的PNG字节流 avatar_buffer = BytesIO() pilImage.save(avatar_buffer, format="PNG") avatar_buffer.seek(0) # 将指针移到缓冲区开头,确保读取完整数据 await client.user.edit( password=str(data.get()['Settings']['password']), avatar=avatar_buffer.read() )
关键说明
- 使用
save()方法将图片写入BytesIO时指定format='PNG',生成带完整文件头的标准图片字节流,Discord才能正确识别图片类型。 - 调用
seek(0)是因为写入数据后缓冲区指针会停在末尾,必须回到开头才能读取完整的图片数据。 - 统一转换为RGBA格式可以避免部分非透明图片格式(如JPG)上传时的兼容性问题。
内容的提问来源于stack exchange,提问作者CrotaL
相关产品推荐
相关产品推荐

