これが間違っていることを願っていますが、唯一の正しい修正は、_imagingft.c がテキストをレンダリングする方法にパッチを当てることに依存しています。PIL はこのタスクを FreeType に依存していますが、PIL はポジショニングを誤っているようです。また、 の高さgetsize
が過大評価されています (問題はありませんが)。現時点では、これらの問題を処理するためのパッチをhttp://pastebin.com/jP2iLkDNに配置しました (レンダリング コードにパッチを適用するためのより良い方法があるようです)。
以下は、パッチを適用した場合と適用しない場合の出力の例です。
リンクされたディスカッションにあるコードを使用した結果。OSX の場合:
Ubuntu の場合:
上位の数値を生成するコードは次のとおりです。
# -*- encoding: utf8 -*-
import sys
import Image, ImageDraw, ImageFont
im = Image.new("RGBA", (1000, 1000), 'white')
draw = ImageDraw.Draw(im)
start_y = 7
text = u'\u00d1\u00d3yŻ\u00d4Ćgp\u010c\u0137'
for i in xrange(28, 46, 2):
font = ImageFont.truetype('Junicode-Bold.ttf', i)
width, height = font.getsize(text)
draw.rectangle((0, start_y, width, height + start_y), outline='blue')
draw.text((0, start_y), text, font=font, fill='black')
start_y += height + 7
im.crop((0, 0, width + 1, start_y + 2)).save(sys.argv[1])
下の図は、テキストの一部を切り取る PIL に関するリンクされたトピックにあるコードに従って生成されました。