web-dev-qa-db-ja.com

PIL'ImageFontを使用してフォントのピクセルの高さを取得するにはどうすればよいですか?

PILのImageFontモジュールを使用してフォントをロードし、テキスト画像を生成しています。テキストをエッジにしっかりとバインドしたいのですが、ImageFontを使用してフォントの高さを取得すると、文字のパディングが含まれているようです。赤い長方形が示すように。 enter image description here

c = 'A'
font = ImageFont.truetype(font_path, font_size)
width = font.getsize(c)[0]
height = font.getsize(c)[1]
im = Image.new("RGBA", (width, height), (0, 0, 0))
draw = ImageDraw.Draw(im)
draw.text((0, 0), 'A', (255, 255, 255), font=font)
im.show('charimg')

文字の実際の高さを取得できる場合は、下の長方形の境界行をスキップできます。この情報はフォントから取得できますか?ありがとうございました。

10
binzhang

正確なサイズは多くの要因に依存します。フォントのさまざまなメトリックを計算する方法を紹介します。

_font = ImageFont.truetype('arial.ttf', font_size)
ascent, descent = font.getmetrics()
(width, baseline), (offset_x, offset_y) = font.font.getsize(text)
_
  • 赤い領域の高さ:_offset_y_
  • 緑のエリアの高さ:_ascent - offset_y_
  • 青い領域の高さ:descent
  • 黒い長方形:font.getmask(text).getbbox()

それが役に立てば幸い。

31
imos