使用 PIL 渲染表情符号

问题描述 投票:0回答:3

我正在尝试用推文制作图像,但其中一些包含表情符号。我正在使用 PIL 来渲染我的图像和 Symbola 字体。

文本采用 unicode utf-8 编码,并且 Symbola 字体包含表情符号。这是代码的删节版本:

from PIL import Image, ImageFont, ImageDraw
text = u"\U0001f300" #CYCLONE emoji
image = Image.new("RGBA", (100,100), (255,255,255))
font = ImageFont.truetype("Symbola.ttf", 60, encoding='unic')
draw = ImageDraw.Draw(image)
draw.text((0,0), text, (0,0,0), font=font)
image.save("Test.png")
image.show()

这只是用两个矩形而不是表情符号来渲染图像

非常感谢任何帮助或想法。

谢谢!

编辑: 正如 falsetru 指出的那样,这段代码确实可以在 Ubuntu 中运行,但它不能在 Windows 或 Mac 上运行。有什么想法吗?

python unicode python-imaging-library emoji
3个回答
5
投票

如果符号 CYCLONE u"\U0001f300" (我从网上下载了一个 Symbola.tff),那么与 PIL 一起使用非常简单:

from PIL import Image, ImageDraw, ImageFont, ImageFilter

#configuration
font_size=36
width=500
height=100
back_ground_color=(255,255,255)
font_size=36
font_color=(0,0,0)
unicode_text =u"\U0001f300"
im  =  Image.new ( "RGB", (width,height), back_ground_color )
draw  =  ImageDraw.Draw ( im )
unicode_font = ImageFont.truetype("Symbola.ttf", font_size)
draw.text ( (10,10), unicode_text, font=unicode_font, fill=font_color )
im.show()

看看 pilmoji - Pilmoji 是 Pillow 的表情符号渲染器,Python 的图像库。


3
投票

如果您想用原始字体书写符号,可以通过将字体与

Symbola.ttf
或任何表情符号字体合并来实现。您可以使用
fontforge
(https://fontforge.org/) 合并两种字体。

开始

fontforge
,打开你的主字体,

单击菜单:

element
->
merge fonts
,然后选择您的表情符号字体 (
Symbola.ttf
)。 对于任何弹出对话框,请回答
no

可以选择更改新字体的名称:

element
->
font info

最后转到

file
->
generate fonts
完成后并将其保存为
ttf
(TrueType)。

现在,您可以使用生成的字体来绘制带有表情符号的文本!


1
投票

Pillow 中存在错误,请参阅 #1774#3777。现在应该在 Pillow 6.1 版本中通过 PR#3780 修复此问题,但仅适用于 Python 3.x。

© www.soinside.com 2019 - 2024. All rights reserved.