PILでフォントのサンプル画像作成

[pukiwiki]
//*[[Python でplanet(自動巡回):http://plaza.rakuten.co.jp/kugutsushi/diary/200805010000/]]
[[漢字が使える日本語フォント 無料ダウンロード 46種類:http://blog.4galaxy.net/56.html]]
という記事が[[はてブ:http://b.hatena.ne.jp/entry/http://blog.4galaxy.net/56.html]]でホットエントリ入りしていました。

で、いちいちインストールするのも厭だったので、フォントファイルのサンプル画像を作成するスクリプトをPythonおよび[[PIL:http://www.pythonware.com/products/pil/]]モジュールで書いてみました。
”インスコしてないフォントでもok”
ついでに、一覧用のhtmlファイルも作成。 (テンプレートエンジンとか使ってないのでアレですが)

※どんなhtmlファイルが作成されるかといいますとー、 上記のリンク先を無地にしたような感じと思っていただければ。
*ちょっと困ったこと
-zipファイル内のフォントも表示するように。。。しようと思ったけど、時間切れ。 誰か作ってー
-msgothicなどのフォント名が変。どうすればいいのかしらん?

以下コード

[/pukiwiki]

# -*- coding: utf-8 -*-
import Image,ImageDraw,ImageFont
from glob import glob
import os
im=Image.new("L",(640,120))

draw=ImageDraw.ImageDraw(im)
draw.rectangle((0,0,639,120),fill=(255))
#フォントファイルの場所。サンプルではシステムのフォントフォルダですが
#インストールしてないファイルでも大丈夫です。
fontpath=r"c:¥Windows¥Fonts"
fontpath+=r"¥%s"

fontlist=glob(fontpath % "*.tt*")
fonty=32

sample=[    u"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
        u"あいうえお @ハローワールド♪",
        u"亜唖娃阿哀愛挨姶逢葵茜"
        ]

savename="./img/%s.png" 

oxy=(ox,oy)=(8,8) 

if not os.path.exists(r"./img") :
    os.mkdir(r"./img")

html=["<html><head><title>Font Sample</title></head><body>"]

tmpl="""<div><a href="file://%(f)s">
    %(fbody)s<br/>
    %(fname)s</a><br/>
    %(fstyle)s<br/>
    <a href="file://%(f)s">
    <img src="%(imname)s" border=0 /></a><br/>
        '</div>"""
def test(f) :
    font = ImageFont.truetype(f,fonty)
    nm=font.getname()
    fbody=os.path.split(f)[-1]
    fname=nm[0]
    imname=savename%fbody
    fstyle=nm[1]
    for i,s in enumerate(sample) :
        draw.text((ox,oy+i*fonty),s,fill=0,font=font)

    im.save(imname)
    html.append(tmpl %locals())


for f in fontlist:    

    print ".",
    draw.rectangle((0,0,639,190),fill=(255))

    try :
        test(f)
    except Exception, e:
        print
        print "<<<error >>> %s  %s"% (f,str(e))
    
     
html.append(r"</body></html>")
fp=open("font.html","wb")
fp.write( "¥n".join(html))

fp.close()


コメントを残す

メールアドレスが公開されることはありません。