如何在图像上放置肤色表情符号(黑色竖起大拇指,白色竖起大拇指)?
How to put skin-toned emojis (black thumbs up, white thumbs up) on images?
我希望输出是这样的(在 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")
可以看到,原代码使用
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 library to get advanced text layouting needed for applying those Fitzpatrick Emoji modifiers.
现在,您似乎还使用了 Windows 版本的 Pillow,默认情况下不包括 Raqm。通过 运行:
检查
print(PIL.features.check_feature('raqm'))
最初,我得到 False
作为输出。
获得 libraqm
的预构建 Windows 库似乎并不那么容易,请参阅 this Q&A,但按照评论中的提示并在那里回答,您应该能够在一些 Windows 10 环境下获得 Raqm 运行。
遵循这些提示后,上述测试的输出在我的机器上变为 True
,并且给定的 原始(!) 代码现在重现了链接图片。
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.9.1
Pillow: 8.1.0
----------------------------------------
我希望输出是这样的(在 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")
可以看到,原代码使用
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 library to get advanced text layouting needed for applying those Fitzpatrick Emoji modifiers.
现在,您似乎还使用了 Windows 版本的 Pillow,默认情况下不包括 Raqm。通过 运行:
检查print(PIL.features.check_feature('raqm'))
最初,我得到 False
作为输出。
获得 libraqm
的预构建 Windows 库似乎并不那么容易,请参阅 this Q&A,但按照评论中的提示并在那里回答,您应该能够在一些 Windows 10 环境下获得 Raqm 运行。
遵循这些提示后,上述测试的输出在我的机器上变为 True
,并且给定的 原始(!) 代码现在重现了链接图片。
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.9.1
Pillow: 8.1.0
----------------------------------------