本と科学と尊みと

本のこととか科学技術のこととか趣味のこととか書きます

pillowを使って画像中に日本語文字列を書く方法【python】

pythonで、画像中に日本語文字列を書くための方法について調べてまとめました。

モジュールのインポート

今回は、この3つを使います まず、インポートします

from PIL import Image, ImageDraw, ImageFont

描画の準備

以下の手順で準備しています

  1. pillowのImageクラスのインスタンスを生成(字を書く場所を準備)
  2. 1.で生成したインスタンス上へのDrawクラスのインスタンス(絵を書く道具を準備)
  3. フォントの指定
img = Image.new("RGB", (400, 400), (100,0,0))
draw = ImageDraw.Draw(img)
font_size = 20 #文字の大きさの指定
font = ImageFont.truetype('GDhwGoJA-TTF108b.ttf', font_size)
place = (100, 200) # 文字を書く起点(文字列の左上)の指定(x座標, y座標)
color = (200,200,200) # 文字色の指定(R,G,B)

字を書く場所のサイズを、今回、400 * 400 のサイズに、色をRGB=(100,0,0) (暗い茶色)に指定しています。 Image.open()等を使用することで、ハードディスクに保存してある画像ファイルの上に書くことができます。 また、フォントは、今回はこちらからダウンロードし、pyファイルと同じフォルダに置いて使用しています。

描画処理本体

以下のコードで文字を書きます

draw.text(place, "テキスト", color, font)

そして、以下のコードで、ソースコードと同じフォルダにPNGファイルとして保存できます。

img.save("sample.png", "PNG", optimize = True)

結果、こんな画像ができます

f:id:galleon_blue:20181125212240p:plain

まとめ

opencvでは日本語を描画できませんが、pillowでは、日本語フォントを用意してあげれば、描画できます。 うまくやれば、フォルダ中の画像を一括で読み込んで、「社外秘」とか、「特許出願中」とかの文字をごそっと書き込んで出力できます。