ども!今回はPythonのPillowというライブラリを用いて、画像に文字を合成する方法とLINEフォントを使用する方法について解説していきます。自由にフォントを選択することができると表現の幅が広がります。普段はFigmaで作業をしていますが、自動化するためにはPythonで画像を合成するのが手っ取り早いですぞ!
ご挨拶
ども!最近は調べる系の仕事がタスクに組み込まれている龍ちゃんです。ChatGPTを契約したことで体感効率が爆上がりしています。久しぶりにPythonを書いているので、ソースのサポートとして大活躍です。普段書いている言語と異なる言語を書くと、脳がバグり散らかしますよね。
今回は、OSC広島に持って行った成果物の要素を抽出した内容になります。こちらのブログで書いていた通り、チームのメンバーが優秀だったのでPythonのソースはあまり触っていません。フレームの合成は担当していたので、画像周りに関係するブログになります。この辺のソースコードはネットにいっぱい落ちていますが、備忘録的にまとめていきたいと思います。
今回対象とするシナリオは「Pythonで指定の画像に、LINEのようなフォントを使用して文字を合成する」になります。使用するものとしては、PythonのライブラリであるPillow
とLINE Sheed JPが提供しているフォント(以降:LINEフォント)になります。内容も薄いのでさくっと参考になればよいかと思います。結果は以下の幹事になります。
ソースコード
まずは必要なものから揃えましょう。まずは、ライブラリのインストールです。
pip install pillow
そしてLINEフォントのインストールをしましょう。LINE Sheed JPのサイトの一番下にダウンロードボタンがあります。Pythonのプログラムがアクセスしやすい場所にファイルを配置しましょう。以下がサンプルコードになります。
from PIL import Image, ImageDraw, ImageFont
# 画像を開く(または新しく作成する)
# image = Image.open(image_path)
# 画像作成プログラム
image = Image.new("RGB", (400, 300), color=(73, 109, 137))
# 描画用のオブジェクトを作成
draw = ImageDraw.Draw(image)
# フォントの情報をロード
font = ImageFont.truetype("フォントのパス", size=24)
# 追加するテキストと位置を指定
text = "123456789"
draw.text((10, 10), text, fill=(255, 255, 255), font=font)
# 結果をファイルに保存
image.save("output/text_overlay.png")
サンプルコードにはコメントをChatGPTで記入しています。
詰まった点について紹介しておきます。結構悩まされた部分もあるので、記載しておきます。
- LINE Sheed JPのフォントの場合は
.ttf
が参照できずに.otf
を参照するとうまくいく - フォントの参照がソースの配下にフォントデータを配置する
フォントデータの参照周りが難所でした。Google Fontsからダウンロードしたフォントであれば、.ttf
でも参照ができましたが、LINEフォントの場合ではうまくいきませんでした。この辺は若干の謎が残りました。原因不明です。
終わりに
さて!今回はPythonを用いたちょこっとしたプログラムになります。画像をいじくりまわすプログラムに関しては、Pythonだとさくっとかけるところがうれしいところです。複数の技能をこねくり回すことで色々なことができるので、これからもちょっとしたプログラムをこねくり回していきたいと思います。
Pythonで画像を合成するプログラムについては、こちらで解説しています。
いや~最近ブログ投稿をサボっていたので、リハビリを重ねています。ちょこちょこ書いていくので、気が向いたら読んでみてください。ポエムを多めに投稿する予定なので、こちらもウォッチしてみてね。グッ!( •̀ᴗ•́ )و ̑̑