画像処理ライブラリPillowのImageDraw.textで文字を描画できる。フォントや文字サイズの指定はImageFont.truetypeにより行う。
Pillow(PIL)を使うためにはインポートが必要。Image, ImageDraw, ImageFontモジュールは通常以下の形式でインポートされる。
from PIL import Image, ImageDraw, ImageFont
1. ImageDraw.text, ImageFont.truetypeの書式
ImageDraw.textの書式は以下。必須の引数はxy, textのみだが、日本語を描画する際にはfontで日本語フォントを指定しないとエラーになる。
ImageDraw.text(xy, text, fill=None, font=None, anchor=None, spacing=4, align='left', direction=None, features=None, language=None, stroke_width=0, stroke_fill=None, embedded_color=False)
引数 | 意味 |
---|---|
xy | 描画位置。文字列左上の座標を(x, y)で指定。 |
text | 描画する文字列。改行文字が含まれる場合 multiline_text() に処理が送られる。 |
fill | 文字の色 |
font | フォント。ImageFontで指定する |
anchor | 文字列の基準位置。デフォルトは左上('la')。 |
spacing | multiline_text() に処理が送られた場合の行間のピクセル数。デフォルトは4 |
align | multiline_text() に処理が送られた場合の行揃え。デフォルトは左揃え('left') |
direction | 文字の進行方向。'rtl'(right to left), 'ltr'(left to right), 'ttb'(top to bottom)が指定できる |
features | OpenTypeフォント特性の指定 |
language | 言語の指定。BCP 47 language codeによる。言語による字体の違いを補う |
stroke_width | 文字の縁取り幅(ピクセル)。デフォルトは0 |
stroke_fill | 文字の縁取り色 |
embedded_color | カラー絵文字を使う際の情報 |
TrueTypeフォントまたはOpenTypeフォントを使うにはImageFont.truetypeにより読み出す。書式は以下。必須の引数はxy, textのみだが、日本語を描画する際にはfontで日本語フォントを指定しないとエラーになる。
ImageFont.truetype(font=None, size=10, index=0, encoding='', layout_engine=None)
引数 | 意味 |
---|---|
font | フォントファイルのパスとファイル名 |
size | 文字サイズをポイントで指定 |
index | font faceの指定 |
encoding | フォントencodingの指定。デフォルトはUnicode |
layout_engine | layout engineの指定 |
文字を描画する際の手順は、最初に
Image
オブジェクトを作成、さらに
Draw
オブジェクトを作成する。
ImageFont.truetype
でフォント種、文字サイズを指定した上で
Draw
オブジェクトに対してImageDraw.text
メソッドを用いることで文字が描画がされる。
from PIL import Image, ImageDraw, ImageFont im = Image.new('RGB', (400, 200), (130, 130, 130)) draw = ImageDraw.Draw(im) font = ImageFont.truetype('C:\Windows\Fonts\meiryo.ttc', 60) draw.text((40, 70), '文字の描画', fill=(255, 175, 0), font=font) im.save('text.png')
実行結果
2. anchorの指定
anchorを指定することで文字列の描画基準位置を設定できる。
横書きの場合、x軸方向の位置を示す一文字(l, m, r)とy軸方向の位置を示す一文字(a, t, m, s, b, d)を組み合わせた2文字で表現する。
'la'(left-ascender), 'lt'(left-top), 'mm'(middle-middle), 'rs'(right-baseline)を指定した場合。
わかりやすくするためxyの座標(200, 100)に白い円を描いてある。
from PIL import Image, ImageDraw, ImageFont anchor = ['la', 'lt', 'mm', 'rs'] for i in anchor: im = Image.new('RGB', (400, 200), (130, 130, 130)) draw = ImageDraw.Draw(im) # anchor位置に白い円を表示 draw.ellipse((195, 95, 205, 105), fill=(255, 255, 255), outline=(255, 255, 255)) font = ImageFont.truetype('C:\Windows\Fonts\meiryo.ttc', 60) draw.text((200, 100), '文字の描画', fill=(255, 175, 0), font=font, anchor=i) im.save('text_'+i+'.png')
実行結果
3. 縁取り文字の描画
ImageDraw.textの引数stroke_width, stroke_fillを指定することで縁取り文字が描画できる。
幅5ピクセルの黒い縁取りを追加する場合。
from PIL import Image, ImageDraw, ImageFont im = Image.new('RGB', (400, 200), (130, 130, 130)) draw = ImageDraw.Draw(im) font = ImageFont.truetype('C:\Windows\Fonts\meiryo.ttc', 60) # 縁取りなし draw.text((40, 20), '文字の描画', fill=(255, 175, 0), font=font) # 縁取りあり draw.text((40, 90), '文字の描画', fill=(255, 175, 0), font=font, stroke_width=5, stroke_fill=(0, 0, 0)) im.save('text_stroke.png')
実行結果
4. リファレンス
Pillow (PIL Fork) > ImageDraw Module > ImageDraw.text
Pillow (PIL Fork) > ImageFont Module > PIL.ImageFont.truetype
Pillow (PIL Fork) > Handbook > Text anchors
0 件のコメント:
コメントを投稿