如何使用Python PIL库正确渲染全彩Emoji表情到图片?
全彩Emoji在PIL中渲染异常的解决方案
问题原因
- 你当前使用的OpenSansEmoji字体本身仅包含单色Emoji矢量轮廓,无内置全彩资源,无法直接渲染出彩色效果
- 低于9.1版本的Pillow原生
draw.text()接口默认不支持解析彩色字体的色彩信息表,即使使用全彩Emoji字体也只会输出单色线条
解决步骤
方案一:升级Pillow+使用全彩Emoji字体(最简便)
- 升级Pillow到9.1及以上版本,该版本开始原生支持全彩字体渲染:
pip install --upgrade pillow - 使用内置全彩Emoji资源的字体,同时可以配置普通文本字体作为 fallback 覆盖中英文等常规字符
- 修改渲染代码,调用
draw.text()时添加embedded_color=True参数开启彩色渲染,修改后代码如下:
from PIL import Image, ImageDraw, ImageFont # 普通文本字体可根据需求替换,fallback配置全彩Emoji字体 text_font = ImageFont.truetype("msyh.ttc", size=20, encoding='unic', fallback=[ImageFont.truetype("NotoColorEmoji.ttf", size=20)]) img = Image.new("RGBA", (400,100), (54, 57, 63)) draw = ImageDraw.Draw(img) # 开启彩色字体渲染 draw.text((0,0), responceText, (255,255,255), font=text_font, embedded_color=True) img = img.convert('RGB') img.save("images/image_text.png")
方案二:低版本Pillow兼容方案
如果无法升级Pillow版本,可以先通过第三方库将文本中的Emoji单独提取出来转换为图片,再逐字计算位置将Emoji图片贴到文本渲染后的画布对应位置即可。
内容的提问来源于stack exchange,提问作者Jeremy Hsieh
相关产品推荐
相关产品推荐

