PILで文字列を画像に書き出してみたよ。
PIL で文字列から画像を生成する必要があったので、 色々ためしてみたよ。
書き出す為のフォントは 独立行政法人情報処理推進機構のフォント(IPAフォント)付き をあらかじめ /usr/local/grass5 にインストールしておいた。
#!/usr/bin/env python
# vim: fileencoding=utf-8 :
from PIL import Image, ImageDraw, ImageFont
# encoding="unic"を指定しないと日本語が書き出せなかった。
font = ImageFont.truetype('/usr/local/grass5/fonts/ipagp.ttf',
25, encoding='unic')
image = Image.new('RGBA', (100, 100))
draw = ImageDraw.Draw(image)
# fontでフォント指定、fillでカラー指定出来る。
draw.text((0, 0), u'ほげほげ', font=font, fill='#000000')
# pngで書き出す。
image.save('hoge.png', 'PNG')
書き出す文字列が改行を含んでいると、 最初の行しか書き出されないみたい。 それにサイズを適当に指定してしまっているので、 長い文字列が来るとはみ出してしまう。
そこで、 ImageFont の getsize で文字列がとるサイズを取得出来るみたいなので、 コレを使ってサイズを取得してみる。
#!/usr/bin/env python
# vim: fileencoding=utf-8 :
from PIL import Image, ImageDraw, ImageFont
s = u"""クロワッサン食べたくなって来たなぁ。
おいしいクロワッサンをスープパスタと食べる。
あ、想像したら、ハラへって来たよ。"""
font = ImageFont.truetype('/usr/local/grass5/fonts/ipagp.ttf',
25, encoding='unic')
# 改行で分割して幅と高さを取得する。
lines = []
width = 0
height = 0
for l in s.split('\n'):
lines.append(l)
# 文字列を渡すと幅と高さのタプルが返ってくる。
w, h = font.getsize(l)
if w > width:
width = w
if h > height:
height = h
# 取得した幅と高さを使ってサイズを指定。
image = Image.new('RGBA', (width, len(lines) * height))
draw = ImageDraw.Draw(image)
# 行ごとに書き出す。
for i, l in enumerate(lines):
draw.text((0, i * height), l, font=font, fill='#000000')
image.save('hoge.png', 'PNG')
コレで実際に書き出してみたのがコチラ。 透過PNGなので、IEだとちょっとアレですが。
と思いきや、諸事情により、データが消えちゃった。すいませんすいません。
文字列自体に特に意味はありません。
- Posted at:
- 2007/10/14 08:23:55
- 4 Comments
- 0 TrackBacks
- Trackback:
- http://humming.via-kitchen.com/2007/10/14/string-2-image-using-pil/trackback/
TrackBacks
まだ登録されていません。
Comments
ENDLESS
おっ!!トゥ晴らしい
☆ご苦労様です☆
nobu
最初、日本語が書けなかった時は、正直焦ったよ!
上手く出来て、本当に良かった♪
takao
wordpressでこんな感じのがありますね。フィルタでできそうですね。そういえばsmileのフィルタもないなぁ…
# django blog作成中です
nobu
wordpressってスゴイんすね。
Django blog頑張ってくださいね!