漢字を画像として出力【備忘録】
メモ
ついつい、調べてしまうので、備忘録として。(適宜、関数化を推奨)
環境
- MacOS 10.14.3 Mojave
- python 3.7.2
- OpenCV 4.0.0 (opencv-python: pip)
- (venv: https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e)
目標
- 漢字一文字を描画した画像ファイルが欲しい
入力
- 漢字(または 対応する ユニコード: 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)
- フォントファイル
- 文字の色
- 描画サイズ
- 背景色
- 背景画像サイズ
出力
- 画像ファイル名(今回は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: 最後までありがとうございました
Author And Source
この問題について(漢字を画像として出力【備忘録】), 我々は、より多くの情報をここで見つけました https://qiita.com/U1KURI/items/879bd5437786674a9019著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .