背景
Pillowで絵文字が表示できなくてハマった
Pillowで絵文字をレンダリングしたくてあちこち検索し「結局使えるの?使えないの?はっきりして!」と思った頃に無事出力できた。
下のような残念な出力結果と格闘している方の時短のためにメモ。
解決方法
見つけたかったのはこの記事だ
①NotoColorEmoji.ttf
とseguiemj.ttf
をダウンロードしてきて、下記のtest.py
と同じ階層に入れる。
②test.py
を実行すると絵文字がレンダリングされて出力される。
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("NotoColorEmoji.ttf", "cbdt")
test("seguiemj.ttf", "colr")
お!かわいい感じでレンダリングされている。
2つのフォントの特性を見比べてみて、自分はNotoColorEmoji.ttf
の方が好みだったので、そちらを使うことにした。
出力したかった、令和市のカレンダー画像も無事に完成。
余談
####結果:Pythonistaでは動かなかった.
自分はPythonを使うときに、iPad×Pythonista環境を使ってるのだが、PythonistaではうまくPillowがアップデートできなかった。
そのため、NotoColorEmoji.ttf
を使おうとするとエラーが出て、絵文字レンダリングを完了できなかった。
しかし、Pythonistaで作成したファイルを a-Shellで実行したらうまくいった。
Pythonistaはコーディングしやすいし、a-shellは更新しやすいので,この連携は今回以外にも応用が利く気がする。