【Python】テキスト文字を画像に描画・フォントデザイン|Pillowによる画像処理

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • Pythonによる画像処理に興味がある。
  • PythonとPillowを用いて「好みのテキストを画像に挿入する方法」が知りたい。
目次

【Python】Pillowとは

Pillowとは、画像処理に特化したPythonのライブラリです。

Pillowをもとに、画像読込・加工・合成・保存・フィルタリング・トリミング・リサイズ・回転・クロップなど、多くの画像処理の操作が可能です。

Pillowは、Python 2.7およびPython 3.xで動作します。また、pngjpegを始め、多くのファイル拡張子をサポートしています。

Pillowライブラリのインストール

Pillowライブラリのインストールが未済の場合、コマンドプロンプト(Windows)やターミナル(Mac)を開き、以下を実行しておきましょう。

pip install Pillow

【Python×Pillow実践】テキストを画像に挿入

PythonとPillowライブラリを用いて、上図のように、画像内にテキストを挿入する方法を解説します。

Pythonライブラリ読込

Pillowライブラリを読み込みます。先頭に以下のコードを配置しましょう。

from PIL import Image, ImageDraw, ImageFont

画像の入出力設定

加工する画像のファイルパスと加工後の出力先を指定しておきます。

# 加工する画像があるディレクトリ + ファイル名
image_path = "/Users/xxxx/Desktop/" + "test.jpg"

# 加工後の出力ディレクトリ + ファイル名
output     = '/Users/xxxx/Desktop/' + "test_draw.jpg"

画像のフォント設定

描画するテキスト用のフォント設定を行います。挿入テキスト(text)、使用するフォントのファイルパス(font_path)、フォントサイズ(font_size)、フォントカラー(font_color)、テキストの挿入位置座標(axis)をそれぞれ指定します。

コード

# 挿入テキスト
text = "挿入テキスト挿入テキスト"

# フォントパス
font_path  = "/Users/ユーザー名/Library/Fonts/RictyDiminished-Regular.ttf"

# フォントサイズ
font_size  = 80

# フォントカラー
font_color =  '#ffffe0'

# 描画位置座標
axis = (600, 450)

【参考】フォントパスの指定方法について

フォントとは、「遊ゴシック」「Arial」「Meiryo UI」などデジタル化した書体を指します。Pillowでお好みのフォントを利用する場合、そのフォント情報を格納したファイル(以下、フォントパスと言及)の指定が必要です。デフォルトで全てのPCにはフォント用のファイルが格納されています。

フォントパスは、WindowsとMac OSで指定方法が異なり、それぞれ次のように指定できます。

Windowsの場合
  1. C:ドライブ/Windows/Fontsを開く(各種書体に対応したフォントファイルが確認できる)
  2. お好みのフォントを右クリックし、プロパティを開き、フォントパスを確認する
  3. 確認したフォントパスをPython上で指定する
Macの場合
  1. Users/ユーザー名/ライブラリ/Fonts/xxxx.ttfというファイルがあるため、それをPythonで指定する

テキストを画像に描画

前述のテキスト描画設定に基づき、画像内にテキストを挿入します。以下を実行しましょう。

# 画像を開く
img = Image.open(image_path)

# フォント
font = ImageFont.truetype(font_path, font_size)

# 描画
draw = ImageDraw.Draw(img)

# 画像に文字列を描画
draw.text(axis,            # 座標
          text,            # 描画するテキストタイトル
          font_color,      # フォントの色
          font=font,       # フォント設定
          spacing=4,       # テキスト間隔にとるスペース
          align='center',  # テキストの揃え方(center:中央揃え, left:左揃え, right:右揃え)
          anchor='md'      # アンカーテキスト
         )


# 画像保存
img.save(output)

【参考】Pillowでテキストを画像に描画|Pythonコード全量

ここまで説明したコードを全て以下に示します。

from PIL import Image, ImageDraw, ImageFont

# =====================================================
# 画像入出力設定
# =====================================================

# 加工する画像があるディレクトリ + ファイル名
image_path = "/Users/xxxx/Desktop/" + "test.jpg"

# 加工後の出力ディレクトリ + ファイル名
output     = '/Users/xxxx/Desktop/' + "test_draw.jpg"

# =====================================================
# 描画設定
# =====================================================

# 挿入テキスト
text = "挿入テキスト挿入テキスト"

# フォントパス
font_path  = "/Users/ユーザー名/Library/Fonts/RictyDiminished-Regular.ttf"

# フォントサイズ
font_size  = 80

# フォントカラー
font_color =  '#ffffe0'

# 描画位置座標
axis = (600, 450)

# =====================================================
# 描画
# =====================================================

# 画像を開く
img = Image.open(image_path)

# フォント
font = ImageFont.truetype(font_path, font_size)

# 描画
draw = ImageDraw.Draw(img)

# 画像に文字列を描画
draw.text(axis,            # 座標
          text,            # 描画するテキストタイトル
          font_color,      # フォントの色
          font=font,       # フォント設定
          spacing=4,       # テキスト間隔にとるスペース
          align='center',  # テキストの揃え方(center:中央揃え, left:左揃え, right:右揃え)
          anchor='md'      # アンカーテキスト
         )


# 画像保存
img.save(output)

【参考】Python・OpenCVを用いた画像処理

当サイトでは、PythonのOpenCVライブラリを用いた画像処理ノウハウを多数公開しています。

用途【Python×OpenCV】記事名
画像変換画像のリサイズ・拡大・縮小
画像変換画像の回転・反転・平行移動|アフィン変換
画像変換画像の明るさ調節|ガンマ補正
画像変換グレースケール・HSV・L*a*b|色空間の変換
画像変換モノクロ(白黒)画像変換|2値化処理
画像変換ヒストグラムの描画・ヒストグラム均一化処理
画像変換画像上にテキスト・図形(直線・長方形・円)を描画
画像変換画像の透視変換・遠近法
画像変換画像のノイズ除去・平滑化
画像変換画像の畳み込み(空間フィルタリング)
特徴抽出エッジの検出方法

画像認識や物体検出を学ぶ上でおすすめの教材はこちらをご参考ください。

最後に

この記事が気に入ったら
フォローしてね!

目次