1. はじめに|Pythonで画像に文字を入れたい!
こんにちは!この記事では、Pythonを使って画像に文字を入れる方法を、超わかりやすく紹介していきます。
たとえば、
- SNSで使うサムネイル画像にタイトルを入れたい
- オリジナルのメッセージカードを作りたい
- 自動で日付や名前を入れた画像を作りたい
こんなことをPythonでサクッとやってみたい人にピッタリの内容です!
今回は、Pythonの画像編集ライブラリ「Pillow(ピロー)」を使って、画像に文字を描く方法をステップバイステップで解説します。
# 実際にこんなことができます
from PIL import Image, ImageDraw, ImageFont
img = Image.new('RGB', (300, 100), color=(255, 255, 255))
draw = ImageDraw.Draw(img)
font = ImageFont.load_default()
draw.text((10, 40), "こんにちは、Python!", fill=(0, 0, 0), font=font)
img.save('sample.png')
↑このコードを実行すると、「こんにちは、Python!」と書かれた画像が完成します!
しかも、無料で・プログラミングだけで・何枚でも自動生成できちゃうんです。
プログラミング初心者でも大丈夫!
この記事では、「Pillowってなに?」「どうやって使うの?」というところから、日本語フォントの使い方や保存方法まで、やさしく解説していきます。
さぁ、一緒にPythonで画像に文字を入れてみましょう!
2. Pillowって何?インストール方法を解説
画像に文字を入れるには、Pythonだけではちょっと力不足…。
そこで登場するのが、**画像編集ができるライブラリ「Pillow(ピロー)」**です!
Pillowってなに?
Pillowは、Pythonで画像を開いたり、編集したり、保存したりできる便利なライブラリです。もともとは「PIL(Python Imaging Library)」という古いライブラリがありましたが、現在はその後継としてPillowが主流になっています。
Pillowを使うと、こんなことができます:
- 画像のサイズを変更する
- テキスト(文字)を描画する ←今回やる!
- 画像に図形(線・四角)を描く
- 画像を切り抜いたり、合成したりする
Python初心者でも使いやすく、ドキュメントも豊富なので安心です♪
Pillowのインストール方法
それでは、さっそくPillowをインストールしましょう。
Pythonがパソコンにすでに入っていれば、以下のコマンドをターミナルやコマンドプロンプトに入力するだけでOKです👇
pip install Pillow
インストールがうまくいくと、以下のようなメッセージが表示されます:
Successfully installed Pillow-10.x.x
💡補足:エラーが出た場合は、Pythonのバージョンが古いか、pipコマンドが使えない環境かもしれません。その場合は、以下の記事も参考にしてください。
🔗【Python入門1】WindowsでPythonを始めよう!IDLEのインストールと基本の使い方ガイド
3. 画像に文字を入れる基本コード
さあ、ここからいよいよ実践編です!
この章では、白い画像を新しく作って、その上に文字を描く基本的なコードを紹介します。
📌 まずはサンプルコードを見てみよう!
from PIL import Image, ImageDraw, ImageFont
# ① 白い画像を作成(300×100ピクセル)
img = Image.new('RGB', (300, 100), color=(255, 255, 255))
# ② 画像に描画するためのオブジェクトを作成
draw = ImageDraw.Draw(img)
# ③ フォントを指定(ここではデフォルト)
font = ImageFont.load_default()
# ④ 文字を描く(位置、テキスト、色、フォント)
draw.text((10, 40), "こんにちは、Python!", fill=(0, 0, 0), font=font)
# ⑤ 画像を保存
img.save("output.png")
🔍 各ステップをかんたんに解説!
| ステップ | 内容 |
|---|---|
| ① | 真っ白な画像を新しく作ります。サイズは (300, 100) ピクセルで、背景は白 (255, 255, 255)。 |
| ② | ImageDraw.Draw(img) で、「この画像に描き込むぞ」という準備をします。 |
| ③ | ImageFont.load_default() は、Pillowに最初から入っているデフォルトの英字フォントです。 |
| ④ | draw.text() で、画像の上に文字を描画します。第1引数は位置(左から10px、上から40px)、第2引数がテキストです。 |
| ⑤ | img.save() で画像を保存します。ファイル名は "output.png" にしています。 |
🖼 実行するとこうなる!
このコードを実行すると、「こんにちは、Python!」と書かれた画像が output.png として保存されます。
画像ビューアなどで開けば、自作の画像が完成しているはずです!
💡 注意:この時点では 英語フォントしか使えません。
「日本語が表示されない!」と困った方は、次の章で日本語フォントの指定方法をしっかり解説しますのでご安心ください!
4. 日本語フォントを使うときの注意点
前の章のコードを使って「こんにちは、Python!」と表示させようとしたのに…
**「文字が出ない!?」**ってなった人、いませんか?
それ、フォントが原因です!
❌ デフォルトフォントは日本語非対応!
実は ImageFont.load_default() で使われるデフォルトフォントは、英数字のみ対応です。
そのため、「こんにちは」や「ありがとう」など**日本語の文字は表示されない(または四角になる)**んです。
✅ 日本語を表示するには ImageFont.truetype() を使おう
日本語を表示したい場合は、日本語に対応したフォントファイル(.ttfや.ttc)を指定する必要があります。
たとえば、Windowsの場合は次のように書きます👇
from PIL import Image, ImageDraw, ImageFont
# 白い画像を作成
img = Image.new('RGB', (400, 100), color=(255, 255, 255))
draw = ImageDraw.Draw(img)
# 日本語フォントを指定(Windowsの例)
font = ImageFont.truetype("C:/Windows/Fonts/meiryo.ttc", 32)
# テキストを描画
draw.text((10, 30), "こんにちは、Python!", fill=(0, 0, 0), font=font)
# 保存
img.save("output_japanese.png")
🖥 OSごとのフォント例(探し方も)
| OS | フォント名 | 例 |
|---|---|---|
| Windows | メイリオ | "C:/Windows/Fonts/meiryo.ttc" |
| Mac | ヒラギノ角ゴ | "/System/Library/Fonts/ヒラギノ角ゴシック W3.ttc" |
| Linux | IPAフォント | "/usr/share/fonts/opentype/ipaexg/ipaexg.ttf"(環境により異なる) |
💡 フォントファイルの場所がわからない場合は、エクスプローラーやFinderで「Fonts」と検索すると見つかります。
⚠ よくあるエラーと対処法
| エラー内容 | 原因 | 解決策 |
|---|---|---|
OSError: cannot open resource | フォントファイルのパスが間違っている | フォントの場所を正しく指定する(絶対パスがおすすめ) |
| 日本語が表示されない | フォントが日本語非対応 | 日本語に対応したフォントを選ぶ(メイリオやIPAフォントなど) |

これで日本語のテキストもばっちり表示できるようになります!
5. 文字の位置、大きさ、色を調整するには?
画像に文字が入れられるようになったら、次に気になるのが**「もっと見やすく」「もっとかっこよく」**することですよね!
この章では、文字の位置・大きさ・色を自由に調整する方法を紹介します!
🎯 文字の位置を変えるには?
文字の位置は、draw.text() の 第1引数で指定します。
これは **画像内の (x, y) 座標(左上が基準)**です。
draw.text((50, 20), "上のほうに表示", font=font, fill=(0, 0, 0))
draw.text((50, 60), "下のほうに表示", font=font, fill=(0, 0, 0))
左から50px、上から20pxや60pxの場所に文字が描かれます。
🔠 フォントの大きさを変えるには?
ImageFont.truetype() の第2引数でサイズを指定できます!
font_small = ImageFont.truetype("C:/Windows/Fonts/meiryo.ttc", 20)
font_large = ImageFont.truetype("C:/Windows/Fonts/meiryo.ttc", 40)
draw.text((10, 20), "小さい文字", font=font_small, fill=(0, 0, 0))
draw.text((10, 60), "大きい文字", font=font_large, fill=(0, 0, 0))
数値が大きいほど、文字も大きくなります。自分の画像サイズに合わせて調整してみましょう。
🎨 文字の色を変えるには?
fill=(R, G, B) の部分で、RGB形式の色を指定します。
| 色名 | fillの値 |
|---|---|
| 黒 | (0, 0, 0) |
| 白 | (255, 255, 255) |
| 赤 | (255, 0, 0) |
| 青 | (0, 0, 255) |
| 緑 | (0, 255, 0) |
draw.text((10, 30), "赤い文字", font=font, fill=(255, 0, 0))
draw.text((10, 70), "青い文字", font=font, fill=(0, 0, 255))
カラフルにするだけで印象がグッと変わりますよ!
🧭 画像の中央に文字を配置したい場合
ちょっと応用ですが、「画像の真ん中に文字を置きたい!」という時は、テキストサイズを先に取得して、計算する方法があります。
text = "中央に表示!"
text_width, text_height = draw.textsize(text, font=font)
x = (img.width - text_width) // 2
y = (img.height - text_height) // 2
draw.text((x, y), text, font=font, fill=(0, 0, 0))
draw.textsize() を使えば、テキストの幅と高さがわかるので、それを使って中央に配置できます!
6. 完成画像を保存する方法
せっかく文字を入れた画像が完成したら、ちゃんと保存してあとで使えるようにしたいですよね。
この章では、画像ファイルを保存する方法を解説します!
💾 保存はたった1行でできる!
Pillowでは、画像オブジェクトに対して .save() を使うだけでOK!
img.save("my_image.png")
これでカレントフォルダ(プログラムを実行した場所)に "my_image.png" というファイルが保存されます。
🖼 ファイル形式も自由に選べる!
保存時にファイル名の拡張子を変えるだけで、JPEG・PNG・BMPなど色々な形式に対応できます。
img.save("output.jpg") # JPEG形式で保存
img.save("output.bmp") # BMP形式で保存
img.save("output.png") # PNG形式で保存(透過も可能)
💡注意点:JPEG形式は「透過」ができません。透明な背景を使いたいときはPNGを選びましょう。
🔄 上書き保存に注意!
ファイル名をすでに存在する名前にしてしまうと、そのファイルが上書きされてしまいます。
img.save("test.png") # test.png があれば上書きされる!
安全のために、ファイル名に日時や連番を入れるのもおすすめです👇
import datetime
now = datetime.datetime.now()
filename = f"output_{now:%Y%m%d_%H%M%S}.png"
img.save(filename)
これなら毎回ユニークなファイル名になるので安心です♪
📁 保存場所を指定したい場合
保存先のフォルダを指定するには、パスを追加します:
img.save("images/output.png") # images フォルダ内に保存
※あらかじめ "images" フォルダを作っておく必要があります!

画像の保存方法もマスターできましたね!
これで「画像を作って→文字を入れて→保存する」までの基本の流れはバッチリです👍
7. 応用編|複数行テキストを描くには?
これまでの内容で「1行の文字」を画像に入れる方法はわかりましたね!
でも、こんなときはどうしましょう?
- 長い文章を折り返して表示したい
- メッセージカードのように改行を含んだ文字列を描きたい
そんなときに使えるのが、Pillowの **multiline_text()** という関数です!
💡 text()とmultiline_text()の違い
| 関数名 | 改行の扱い | 複数行対応 |
|---|---|---|
text() | 改行できない | ❌ |
multiline_text() | \nで改行できる | ✅ |
📄 サンプルコード:改行付きの文章を描いてみよう!
from PIL import Image, ImageDraw, ImageFont
# 白い背景画像を作成
img = Image.new("RGB", (400, 200), (255, 255, 255))
draw = ImageDraw.Draw(img)
# フォントの設定
font = ImageFont.truetype("C:/Windows/Fonts/meiryo.ttc", 20)
# 改行を含むメッセージ
message = "こんにちは!\nPythonで\n画像編集してみよう!"
# 複数行テキストを描画
draw.multiline_text((10, 30), message, fill=(0, 0, 0), font=font, spacing=10)
# 保存
img.save("multiline_example.png")
このコードを実行すると、3行に分かれたテキストが描かれた画像が作成されます!
✨ spacing パラメータで行間を調整しよう
spacing=10 の部分は、**行と行の間のスペース(行間)**をピクセル単位で指定できます。
draw.multiline_text((10, 30), message, font=font, fill=(0, 0, 0), spacing=5) # 行間を狭く
draw.multiline_text((10, 30), message, font=font, fill=(0, 0, 0), spacing=20) # 行間を広く
📝 長文を自動で改行したいときは?
Pillow自体には「自動改行」の機能はありません。
なので、自分で文章を分割して改行コード(\n)を入れる必要があります。
ちょっとした工夫で、Pythonの標準ライブラリ textwrap を使って行ごとに改行できます:
import textwrap
text = "これはとても長い文章なので、改行して表示したいです。Pythonならできます!"
wrapped = textwrap.fill(text, width=15) # 15文字で改行
draw.multiline_text((10, 30), wrapped, font=font, fill=(0, 0, 0))
これで長文でも自動的に整った表示ができますよ♪
8. まとめ
ここまでお疲れさまでした!
この記事では、PythonのPillowライブラリを使って、画像に文字を入れる方法をイチから解説してきました。
📌 この記事でできるようになったこと
- Pillowのインストールと基本の使い方
- 画像に英語・日本語のテキストを描く方法
- フォントサイズや色、表示位置のカスタマイズ
- 複数行のテキストを綺麗に表示する方法
- 作った画像を保存するテクニック
Pythonって、ただの「プログラム言語」っていうイメージがあるかもしれませんが、
ちょっとした画像編集や自動化にも大活躍するんです!
とくに、こんな使い方ができます👇
- SNS投稿用の画像を自動生成
- 毎日の日付入りカレンダー画像を作成
- スクレイピング結果を画像にまとめる
- QRコードやバーコードと合成する

Pillowを使えば、プログラミング×デザインの世界がグッと広がります。
これからも楽しくPythonを学んでいきましょう!
よくある質問(Q&A)
- QPillowとPILって何が違うの?
- A
PIL(Python Imaging Library)は昔使われていた画像編集ライブラリですが、現在は開発が終了しています。
その後継として、互換性のあるPillow(ピロー)が登場し、今はこちらが主流になっています。
なので、今から始めるなら「Pillow」でOKです!
- Q日本語の文字が表示されません!
- A
多くの場合はフォントの指定ミスです。
デフォルトでは英字フォントなので、日本語を表示するにはImageFont.truetype()を使って、日本語対応フォント(例:メイリオ)を指定してください。
- Q画像に書いたテキストが小さすぎる/大きすぎる!
- A
フォントサイズは、
ImageFont.truetype("フォント名", サイズ)のサイズの数値を変えることで調整できます。
画像サイズにあわせて、ちょうどよい大きさを試してみましょう。







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。