PILモジュールでフォントをいじる方法のメモ
こんにちは。らずべりーです。
以前、コンタクトシート作成用のコードを書いていました。
plant-raspberrypi3.hatenablog.com
このプログラムを作ったときは、フォントを指定する方法があまりよく理解できず放置してしまったのですが、今回、PILのドキュメントをよく読んで再チャレンジしてみました。
1. 実行環境
Python 3.6.1
Pillow 4.3.0
Jupyter lab v0.27.0
2. PILドキュメントの読み直し
Pillow — Pillow (PIL Fork) 4.3.0 documentation
PILのドキュメントの該当部分を翻訳
ImageFontモジュールは、同じ名前のクラスを定義します。 このクラスのインスタンスはビットマップフォントを格納し、PIL.ImageDraw.Draw.text()メソッドとともに使用されます。
上記ページの例を見た感じだと、ImageFontクラスに格納されたフォントを、PIL.ImageDraw.textの引数として与える方式のようです。
フォントの指定は
PIL.ImageFont.load(filename)
でもできるようですが、細かく指定するには
PIL.ImageFont.truetype(font=None, size=10, index=0, encoding='', layout_engine=None)
の方が使い勝手が良さそうです。Fontファイルは /System/Library/Fonts に置いてありました。
色コードは以下のページを参考にさせていただきました。
早速お試し。
3. テスト用コード
from PIL import Image, ImageDraw, ImageFont
str_test = "Hello, world!"
#何も指定しないで画像にする場合
img_text1 = Image.new('RGB', (240, 20), (255,255,255))
draw1 = ImageDraw.Draw(img_text1)
draw1.text((0, 0), str_test, (0, 0, 0))
img_text1.save("img_test1.png")
#フォントを指定して画像にする場合(Courier)
img_text2 = Image.new('RGB', (240, 20), (255,255,255))
draw2 = ImageDraw.Draw(img_text2)
fontpath = "/System/Library/Fonts/Courier.dfont"
font = ImageFont.truetype(fontpath, 16)
draw2.text((0, 0), str_test, font=font,fill='#4169e1')
img_text2.save("img_test2.png")
#フォントを指定して画像にする場合(Helvetica)
img_text3 = Image.new('RGB', (240, 20), (255,255,255))
draw3 = ImageDraw.Draw(img_text3)
fontpath = "/System/Library/Fonts/Helvetica.dfont"
font = ImageFont.truetype(fontpath, 16)
draw3.text((0, 0), str_test, font=font,fill='#008000')
img_text3.save("img_test3.png")
#フォントを指定して画像にする場合(Times)
img_text4 = Image.new('RGB', (240, 20), (255,255,255))
draw4 = ImageDraw.Draw(img_text4)
fontpath = "/System/Library/Fonts/Times.dfont"
font = ImageFont.truetype(fontpath, 16)
draw4.text((0, 0), str_test, font=font,fill='#ff6347')
img_text4.save("img_test4.png")
4. 結果
- 指定なし
- Courier, 16pt, royalblue
- Helvetica, 16pt, green
- Times, 16pt, tomato
できました!!
5. ちなみに
.ttcファイルに格納されているフォントでは文字化けしてうまくいかなかったです。エンコーディングの問題ですかねぇ。(詳しい方おられましたら教えてください!!)
おしまい
追記(2017/10/19):
今回のプログラムを引用した記事がありますので、もしよかったら見ていってください(^ ^)ノ
plant-raspberrypi3.hatenablog.com