RaspberryPiでOLED液晶モジュールに出力する文字のフォントを変えたり日本語を出したり
この続き。
RaspberryPiを使ってHiLetgo 0.91" I2C シリアルLCDモジュールを表示させてみる - キノコの自省録
対象製品はこれ。今売り切れてますね……。
HiLetgo 0.91" IIC I2C シリアルOLED液晶ディスプレイモジュール 128x32 3.3V/5V AVR PIC Arduino UNO MEGA [並行輸入品]
これ使って、時計とか作ろうかなと思ってたりしてます。
フォントとフォントサイズの変更
このexplamples/stats.pyをベースに改変してみます。フォントの指定は、98行目のここで行っています。
# Load default font.
font = ImageFont.load_default()
このImageFontというのはPillowのモジュールです。ドキュメントはこちら。
ImageFont Module — Pillow (PIL Fork) 4.2.1 documentation
stats.pyにもコメントとして書かれてあるように、ImageFont.truetype()メソッドを使用すれば、フォントやフォントサイズの変更ができます。
# Alternatively load a TTF font. Make sure the .ttf font file is in the same directory as the python script! # Some other nice fonts to try: http://www.dafont.com/bitmap.php # font = ImageFont.truetype('Minecraftia.ttf', 8)
.ttfフォントがpythonスクリプトと同じディレクトリに入ってるか確認してね、って書いてありますが、そこに配置せず、今回はapt-getでIPAフォントをinstallする方法を試みます。
$ sudo apt-get install fonts-ipafont
インストールされたフォントは、/usr/share/fontsにあります。
$ ls /usr/share/fonts/truetype/
fonts-japanese-gothic.ttf fonts-japanese-mincho.ttf
このフォントを使って表示させてみます。フォントサイズは倍の16に変更します。
#font = ImageFont.load_default() font = ImageFont.truetype("fonts-japanese-gothic.ttf", 16) : draw.text((x, top), "hello,", font=font, fill=255) draw.text((x, top+16), "world!", font=font, fill=255)
システムがフォントのパスを解決しますので、ttfのファイル名だけでOKです。結果はこちら。
日本語の表示
IPAフォントは日本語フォントなので、そのまま日本語が表示できます。pythonスクリプトの文字コードをutf-8にして、ファイル先頭にcoding:utf-8を入れます。
# -*- coding:utf-8 -*- : draw.text((x, top), "こんにちは、", font=font, fill=255) draw.text((x, top+16), "世界!", font=font, fill=255)
これを実行すると、見事に化けます。draw.textはunicodeを要求しますので、正しくデコードできずに文字化けが発生します。そのため、下記のように修正します。
# -*- coding:utf-8 -*- : draw.text((x, top), u"こんにちは、", font=font, fill=255) draw.text((x, top+16), u"世界!", font=font, fill=255)
結果はこちら。