漢字を画像として出力【備忘録】


メモ

ついつい、調べてしまうので、備忘録として。(適宜、関数化を推奨)

環境

目標

  • 漢字一文字を描画した画像ファイルが欲しい

入力

  • 漢字(または 対応する ユニコード: UTF-8)
  • フォントファイル
  • 文字の色
  • 描画サイズ
  • 背景色
  • 背景画像サイズ

出力

  • 画像ファイル名(今回はpng形式とした)

実装

import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image

# 文字の準備
font_path = '/System/Library/Fonts/AquaKana.ttc'
color_char = (255,0,0)    # RGB
size_char = 16

# 背景の準備
spec_canvas = (18,18,3)   # サイズと色数

# 出力ファイル名
o_filename = "kanji_trial.png"


# キャンバスの準備
imageArray = np.zeros(spec_canvas, np.uint8)
imageArray += 255         # 力技。背景を白色に(numpy特有)

pil_image = Image.fromarray(imageArray)  # ImageDrawへの入力を可能な形式に変換
canvas = ImageDraw.Draw(pil_image)       # 描画準備完了

# 文字の準備
## フォントの指定 (ファイル、取扱注意)
font = ImageFont.truetype(font_path, size_char)

## 文字の指定 (直接指定)  ※ ユニコードによる指定の方法は後述 *
canvas.text((1,1), u"永", fill=color, font=font)

# 書き出し用に変換
cv_rgb = np.asarray(pil_image)
cv_bgr = cv2.cvtColor(cv_rgb,cv2.COLOR_RGB2BGR)

cv2.imwrite(o_filename, cv_bgr)

UTF-8で指定したい場合

# "永" に対応する UTF-8のコード値が "u6C38"
canvas.text((1,1), u’¥u6C38’, fill=(0, 0, 0), font=font)

出力結果例

やったね!

参考

「常用漢字の画像とか、ないんだろうか」というツイッターをもとに、このエントリを書きました。
ちなみに、常用漢字に対応するUTF-8の一覧は、以下にあったりします:
http://x0213.org/joyo-kanji-code/

--

End of This Document: 最後までありがとうございました