1

我希望输出是这样的(在 GitHub 上找到):

这个(从github找到).

但目前我是这样的:

得到这个

表情符号的肤色在我的输出中分离。我该如何解决?我需要其他库吗?

GitHub代码:https ://github.com/python-pillow/Pillow/pull/4955

from PIL import Image, ImageDraw, ImageFont

def test(font, out_name):
    fnt = ImageFont.truetype(font, size=109, layout_engine=ImageFont.LAYOUT_RAQM)
    im = Image.new("RGBA", (600, 600), (100, 100, 100, 100))
    draw = ImageDraw.Draw(im)
    draw.text((0, 32), "a\u263A", fill="#faa2", embedded_color=True, font=fnt)
    draw.text((0, 132), "a\u263A", fill="#faa8", embedded_color=True, font=fnt)
    draw.text((0, 232), "a\u263A", fill="#faa", embedded_color=True, font=fnt)
    draw.text((0, 332), "\U0001F3AC\U0001F44B\U0001F3FB\U0001F44B\U0001F3FF", fill="white", embedded_color=True, font=fnt)
    draw.text((0, 432), "a\u263A", fill="#faa2", font=fnt)
    im.show()
    im.save(f"testemoji_{out_name}.png")

test(r"C:\Users\Nulano\Downloads\NotoColorEmoji.ttf", "cbdt")
test("seguiemj.ttf", "colr")

我的代码:

from PIL import Image, ImageDraw, ImageFont
 
def test(font, out_name):
    fnt = ImageFont.truetype(font, size=109, layout_engine=ImageFont.LAYOUT_BASIC,encoding='utf-16')
    im = Image.new("RGBA", (800, 600), (100, 100, 100, 0))
    draw = ImageDraw.Draw(im)
    draw.text((0, 32), "a\u263A",font=fnt, fill="#faa2", embedded_color=True)
    draw.text((0, 132), "a\u263A",font=fnt, fill="#faa8", embedded_color=True)
    draw.text((0, 232), "a\u263A", fill="#faa",font=fnt, embedded_color=True)
    draw.text((0, 332), "\U0001F3AC\U0001F44B\U0001F3FB\U0001F44B\U0001F3FF",font=fnt, fill="white", embedded_color=True)
    draw.text((0, 432), "a\u263A",font=fnt, fill="#faa2", embedded_color=True)
    im.save(path+"testemoji_{out_name}.png")  
    return im
     
# test(path+"Roboto/NotoColorEmoji.ttf", "cbdt")
test(path+"Roboto/seguiemj.ttf", "colr")

4

1 回答 1

1

如您所见,原始代码使用

fnt = ImageFont.truetype(font, size=109, layout_engine=ImageFont.LAYOUT_RAQM)

而您更改了layout_engine参数:

fnt = ImageFont.truetype(font, size=109, layout_engine=ImageFont.LAYOUT_BASIC, encoding='utf-16')

因此,您似乎需要Raqm库来获得应用这些Fitzpatrick Emoji 修饰符所需的高级文本布局。

现在,您似乎也在使用Windows版本的 Pillow,默认情况下不包含 Raqm。通过运行检查:

print(PIL.features.check_feature('raqm'))

最初,我得到了False输出。

获得预构建的 Windows 库libraqm似乎并不容易,请参阅此 Q&A,但按照评论中的提示并在那里回答,您应该能够让 Raqm 在某些 Windows 10 环境下运行。

遵循这些提示后,上述测试的输出更改为True在我的机器上,并且给定的原始(!)代码现在确实重现了链接的图像。

----------------------------------------
System information
----------------------------------------
Platform:      Windows-10-10.0.16299-SP0
Python:        3.9.1
Pillow:        8.1.0
----------------------------------------
于 2021-02-11T11:45:43.437 回答