plant-raspberrypi3のブログ

ラズベリーパイ3とPythonに挑戦して、植物を愛でたり画像を加工したりします。最近はscikit-imageの勉強してます。

PILモジュールでフォントをいじる方法のメモ

こんにちは。らずべりーです。

以前、コンタクトシート作成用のコードを書いていました。

 

plant-raspberrypi3.hatenablog.com

 

このプログラムを作ったときは、フォントを指定する方法があまりよく理解できず放置してしまったのですが、今回、PILのドキュメントをよく読んで再チャレンジしてみました。

 

1. 実行環境

 

macOS Sierra

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 に置いてありました。

 

色コードは以下のページを参考にさせていただきました。

 

www.colordic.org

 

早速お試し。

 

 

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. 結果

 

  • 指定なし

 

   f:id:plant-raspberrypi3:20171014111643p:plain

 

  • Courier, 16pt, royalblue

 

   f:id:plant-raspberrypi3:20171014112126p:plain

 

 

   f:id:plant-raspberrypi3:20171014112142p:plain

 

  • Times, 16pt, tomato

 

   f:id:plant-raspberrypi3:20171014112227p:plain

 

できました!!

 

 

5. ちなみに

 

.ttcファイルに格納されているフォントでは文字化けしてうまくいかなかったです。エンコーディングの問題ですかねぇ。(詳しい方おられましたら教えてください!!)

 

おしまい

 

追記(2017/10/19):

今回のプログラムを引用した記事がありますので、もしよかったら見ていってください(^ ^)ノ

 

plant-raspberrypi3.hatenablog.com