PIL で斜めに黒文字を貼る

必要があって PIL をイジイジしておりました。
で、やってる途中にちょっと詰まったのでメモ。

  • やりたいこと
    • 元画像に合わせて斜めに黒い文字を貼り付けたい

調べてみたら、黒色を透過して元画像に貼り付ける方法はあったのですが、
それでやると黒い字は貼り付けることが出来ないわけで…。


完全に行き詰って Twitter 上で聞いてみました。
…ものの2分で回答を頂きました。


やってみた。


背景画像は適当に input.png という名前で用意しておきます。

# -*- coding: utf-8 -*-
import Image, ImageDraw, ImageFont, ImageFilter


# 背景画像を開く
img = Image.open("input.png")
# フォントセット
textFont = ImageFont.truetype("Comic Sans MS.ttf", 24)
# テキストを貼り付ける Image を生成
textImg = Image.new("RGBA", (200, 50), (0, 0, 0, 0))
tmpDraw = ImageDraw.Draw(textImg)
# 貼り付けるテキスト
text = "Sample Text"
# 影分を先に貼り付ける
tmpDraw.text((12, 2), text, font=textFont, fill="rgb(176, 196, 222)")
# 本体文字を貼り付ける
tmpDraw.text((10, 0), text, font=textFont, fill="black")
# 5 度傾ける
textImg = textImg.rotate(5)
# 背景画像に貼り付ける
img.paste(textImg, (60, 50), textImg)
# 画像保存
img.save("output.png")


出力結果:

その他メモ。

  • フォントは適当に ttf ファイルを持ってきた(けどまだマシな方法ありそう
  • テキストを貼り付ける Image は "RGBA" でないと透過されない
  • 影は無くても良いかな…w

しみずかわ先生に感謝。