PILのImageDrawモジュール、特にDraw.textsize
メソッドに問題があります。このメソッドは文字列とフォントを受け取り、そのフォントでレンダリングしたときに文字列が占める幅と高さを返します。それは、それが返す高さの下限を持っているようだ:私は43
より低いものを返すようにそれを説得することはできません。ここでは一例(link)私は(返さ幅&高さに基づいてテキストの周りに描かれた境界ボックス)で探しています何を表示するにはだ、とここで生成されるコードです:フォントが立ち上がるたらPIL ImageDraw.textsizeが正しくない高さを返します
from PIL import Image, ImageDraw, ImageFont # PIL 1.1.7; Python 2.6.6
im = Image.open(r'C:\test\blank.png').convert('RGB')
draw = ImageDraw.Draw(im)
TEXTCOLOR = (0, 0, 0)
X = 10
Y = 3
for fontsize in xrange(8, 51):
# Other fonts behave the same way
font = ImageFont.truetype('Arial.ttf', fontsize)
text = 'Hello, World! Size %d' % fontsize
width, height = draw.textsize(text, font=font)
print 'Font size %d: %d x %d' % (fontsize, width, height)
bbox = [(X, Y), (X+width, Y+height)]
draw.rectangle(bbox, outline=TEXTCOLOR)
draw.text((X, Y), text, font=font, fill=TEXTCOLOR)
Y += height + 3
im.show()
は、サイズが約38になると、バウンディングボックスが伸びて正しく一致しますが、その前にはスタティック43
に設定されます。問題は、誰もImageDrawがこのように動作している理由を知っていますか?誰かがそれを修正する方法を知っていますか?私は現在、設定することで問題を回避働いている:
width = min(width, fontsize+1)
を...しかし、それは明らかにこれまでに考案された最も堅牢なソリューションではありません。
使用しているPILモジュールはどこで手に入りましたか? Python 2.7.3でコードを実行しようとすると、 'ImportError:_imagingft Cモジュールがインストールされていません 'というエラーが表示されます。 – martineau
@martineau私は元々どこに持っていたのか分かりません(私は首に痛みがあることを覚えていますが)。私が使ったインストーラは 'PIL-fork-1.1.7.win32-py2.6.exe'という名前ですが、今はオンラインで見つけられません。 –
私が遭遇している 'ImportError'は、私が解決しようとしている共通の問題です。私がそうすると、あなたの問題をもう一度見てみましょう。 – martineau