LoginSignup
6
4

More than 1 year has passed since last update.

Python+Pillowで、任意の文字列を画像で出力する

Posted at

もし任意の文字列を画像化できれば、たとえばSlackの絵文字ジェネレータを自作するなど、面白い使い道があるかと思い、やってみました。

使うもの

サンプルのコード

とりあえず画像を出力する、だけのコードは以下。

from PIL import Image, ImageDraw, ImageFont

# RGB, 画像サイズ, 背景色を設定
im = Image.new("RGB", (512, 512), (256, 256, 256))

draw = ImageDraw.Draw(im)

# PCローカルのフォントへのパスと、フォントサイズを指定
font = ImageFont.truetype('C:/Windows/Fonts/meiryob.ttc', 140)

# 複数行の文字を出すのに、行ごとリストに入れてforで回す
texts = ["無いぞ、", "知名度。", "SCSK"]

# 文字描画の初期位置(画像左上からx, yだけ離れた位置)
x = 20
y = 0

# 文字の描画
for text in texts:
    # 描画位置、描画する文字、文字色、フォントを指定
    draw.text((x, y), text, fill=(26, 39, 146), font=font)
    y = y + 150

# ファイルに出力
im.save("./image.png")

実行すると以下の画像が得られます。

image.png

※元ネタはこれ>あるぞ、ITの可能性。SCSK | SCSK株式会社

ただ、もうちょっとマシにやる余地もあります。

Draw Multiline Textを使う

ImageDraw Module — Pillow (PIL Fork) 9.1.1 documentation

textを使って愚直に文字を書き込んでいってもいいのですが、multiline_textを使っても実現できます。

コードはこちら。

from PIL import Image, ImageDraw, ImageFont

# RGB, 画像サイズ, 背景色を設定
im = Image.new("RGB", (512, 512), (256, 256, 256))

draw = ImageDraw.Draw(im)

# PCローカルのフォントへのパスと、フォントサイズを指定
font = ImageFont.truetype('C:/Windows/Fonts/meiryob.ttc', 140)

# 描画位置、描画する文字、文字色、フォントを指定
draw.multiline_text((20, 0), "無いぞ、\n知名度。\nSCSK", fill=(26, 39, 146), font=font)

# ファイルに出力
im.save("./image2.png")

改行コードを入れるだけで良く、全体がすっきりしました。

一方、長い文章をいいところで自動で改行させたい等の場合は別の工夫が必要になりそうです。

参考

おまけ

知名度ないだけだと怒られそうなのでフォローのために以下画像も作りました。

image2.png

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4