6

この画像はPILで作成されました。この画像でgとyがどのように切り取られているかを確認してください。どうすればこれを防ぐことができますか?

http://img109.imageshack.us/img109/8874/screenshotep.png

この画像を作成したコードは非常に単純です(省略形):

import Image, ImageDraw, ImageFont

im = Image.new("RGBA", (200, 200), 'white')
draw = ImageDraw.Draw(im)

font = ImageFont.truetype("VeraSe.ttf", 12)

draw.text(
           (1, 1),
           " %s: " % "ggjyfFwe__",
           font=font,
           fill='black'
)

draw.text(
           (1, 30),
           " %s" % 15,
           font=font,
           fill='black'
)

im.show()

いくつかの異なるフォントで試してみましたが、常にクリップされます。驚いたことに、「PILフォントクリッピング」をグーグルで検索すると、有用なヒットはほとんど返されません...Ubuntu9.10でpython2.6.4とP​​IL1.1.6を使用しています

4

5 に答える 5

1

これまでに述べたアプローチを使用して一部のフォントでこの問題を解決できなかったため、PIL のテキスト drawig メソッドの透過的な代替としてaggdrawを使用することになりました。

aggdraw に書き直されたコードは次のようになります。

import Image
import aggdraw

im = Image.new("RGBA", (200, 200), 'white')
draw = aggdraw.Draw(im)

# note that the color is specified in the font constructor in aggdraw
font = aggdraw.Font((0,0,0), "VeraSe.ttf", size=12, opacity=255)

draw.text((1, 1), " %s: " % "ggjyfFwe__", font) # no color here
draw.text((1, 30), " %s" % 15, font)

draw.flush() # don't forget this to update the underlying PIL image!

im.show()
于 2012-01-31T13:17:02.860 に答える
0

「バグ」は 2012 年に Ubuntu 11.10 でまだ存在します。Fontsize 11、12、13、および 15 では、アンダースコアが完全にクリップされます。

#!/usr/bin/env python
""" demonstrates clipping of descenders for certain font sizes """
import Image, ImageDraw, ImageFont
fontPath = "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf"
im = Image.new('L', (256, 256))
ys=15
for i in range(10,21):
    fh = ImageFont.truetype(fontPath, i)
    sometext="%dgt_}" % (i)
    ImageDraw.Draw(im).text((10, ys ),sometext , 254, fh)
    ys+=i+5
im.show()
于 2012-03-20T17:19:38.753 に答える
0

私の提案は、画像オブジェクトを作成する前に、テキストに必要なサイズを取得することです。

これはfont.getsize("text")( documentation ) を使用して行われます。

私が作成した画像生成スクリプトでは、最初に 1 行のテキストの最大の高さを見つけましfont.getsize("Åj")"Aj"。次に、マージンと行間隔を含む、必要な画像の高さと行のオフセットを計算しました。

于 2009-12-20T10:48:59.640 に答える