2012-02-20 9 views
1

私はPythonとPILを使ってテキストを描画しています。特定の範囲内にテキストをどのように配置するかに関するいくつかのガイドが必要なため、特定のチュートリアルを見つけました:python PILは私のdraw.textの先頭を切ります

コードは機能しますが、奇妙な動作があります。それは弦の上部を食べる。ここでは、それはhttp://img855.imageshack.us/img855/9292/qttempya4744.png

が好きで、ここにはhttp://img546.imageshack.us/img546/8541/outn.jpg

をどのように見えるかですすべき方法ですここに私のコードは次のとおりです。

import os 
from PIL import ImageDraw, ImageFont, Image 
def draw_text(text, size, fill=None): 
    font = ImageFont.truetype('C:\exl.ttf', 30) 
    size = font.getsize(text)# Returns the width and height of the given text, as a 2-tuple. 
    size = (size[0],size[1]+15) 
    im = Image.new('RGBA', size, (0, 0, 0, 0)) # Create a blank image with the given size 
    draw = ImageDraw.Draw(im) 
    draw.text((0, 25), text, font=font, fill=fill) #Draw text 
    return im 

img = draw_text('zod', 30, (82, 124, 178)) 
img.save('C:\out.jpg',"JPEG") 
print 'Complete!' 
os.startfile('C:\out.jpg') 

私は他のフォントでこのバグがあまりにも(ゴシックやMS Pゴシックを試してみました)があります。 ヘルプplz :)

+0

私はそれを描画しようとすると、描画された文字列を下に移動しようとすると忘れてしまいますが、出力はまだ上のいくつかのピクセルが欠けています。 – ch1zra

+0

'size'引数のポイントは何ですか? –

+0

私が理解したことから(そして私はちょうどPILに直面しています)、与えられたフォントで描かれた文字列の寸法です。この例では、正確な寸法の空白の画像を作成するので、文字列を完全に(または多少シミュレートするalign:center)合わせることができます。 後で特定の境界内で文字列をセンタリングするために必要になります。 私はこれを生成しようとしています:http://img12.imageshack.us/img12/6908/qttempxd4744.png と私は文字列がそれらの中心になるように各テーブルのセルに必要です。 – ch1zra

答えて

2

私はこれを修正することができました。 drawtextには特定のフォントサイズにいくつかの問題があるようです。 、

from PIL import ImageDraw, ImageFont, Image 

im = Image.new('RGBA', (700, 1600), (0, 0, 0, 0)) 
fSize = 1 
yVal = 1 

while fSize <= 50: 
    font = ImageFont.truetype('arial.ttf', fSize) 
    fString = "This line is in Arial font size " + str(fSize) 
    size = font.getsize(fString) 
    draw = ImageDraw.Draw(im) 
    draw.text((5, yVal), fString, font=font, fill=None) 
    fSize += 1 
    yVal += fSize + 5 

とにかく、私はそれを作った: 私は実験のビットをやった、明確に言及した上で、特定のフォントサイズは、テストのために彼らのトップ切り落とさhttp://img838.imageshack.us/img838/7677/pilfontsize.jpg

コードを取得することをここに見ることができます私は誇りに思っています:D このレンダリングの問題は、PILの開発者が作業する必要があります。

+0

ちょうどキックのために、負のフォントサイズを試してみてください。 –

+0

私はそれをやろうとしていましたが、今朝私のpythonがクラッシュしました。私はgetsize()値のためにいくつかの非常識な数字を得て、スクリプトは続行できませんでした。 私が得た正確なエラーコードは覚えていませんが、仕事から家に帰るとすぐにそれを再現して投稿します。 – ch1zra

+0

'(863221,75359)'これは、-1のフォントサイズ(および他のすべての負のフォントサイズも)で受け取るgetsizeタプルです。 'トレースバック(直近の最後の呼び出し): ファイル" C:\ Users \ ch1zra \ Desktop \ imgGen - Copy.py "、行14、 draw.text(5 、文字列内の "C:\ Python27 \ lib \ site-packages \ PIL \ ImageDraw.py"ファイル マスク、オフセット= font.getmask2(text) 、self.fontmode) ファイル "C:\ Python27 \ lib \ site-packages \ PIL \ ImageFont。py "、行150、getmask2 im = fill(" L "、size、0) MemoryError' – ch1zra

関連する問題