2019/11/03(日) [n年前の日記]
#1 [aggdraw][python] aggdraw についてまだ試用中
aggdraw について試用中。
環境は、Windows10 x64 + Python 3.7.5 32bit + Pillow 6.2.1 + aggdraw 1.3.11。
環境は、Windows10 x64 + Python 3.7.5 32bit + Pillow 6.2.1 + aggdraw 1.3.11。
◎ 描画の種類を確認。 :
描画機能として、line(直線)、polygon(ポリゴン)、ellipse(楕円)、rectangle(矩形)等があるらしいのでテスト。
_04_aggdraw_type.py
出力結果。
他にベジェ曲線も使えるらしい。
_04_aggdraw_type.py
from PIL import Image import aggdraw # aggdraw im = Image.new('RGB', (512, 512), "white") d = aggdraw.Draw(im) pen = aggdraw.Pen("black", 4.0) # color, width brush = aggdraw.Brush("green") # color # line x0, y0 = 16, 16 x1, y1 = 240, 240 d.line((x0, y0, x1, y1, x1, y0, x0, y1), pen) # polygon lst = [ # x, y 384, 16, 272, 128, 320, 240, 448, 240, 496, 128, ] d.polygon(lst, pen, brush) # rectangle brush = aggdraw.Brush("orange") # color w, h = 96, 96 x0, y0 = 16, 256 + 16 x1, y1 = x0 + w, y0 + h d.rectangle((x0, y0, x1, y1), pen) x0, y0 = 128, 256 + 16 x1, y1 = x0 + w, y0 + h d.rectangle((x0, y0, x1, y1), brush) x0, y0 = 16, 256 + 128 x1, y1 = x0 + w, y0 + h d.rectangle((x0, y0, x1, y1), pen, brush) # ellipse w, h = 96, 96 x0, y0 = 256 + 16, 256 + 16 x1, y1 = x0 + w, y0 + h d.ellipse((x0, y0, x1, y1), pen) x0, y0 = 256 + 128, 256 + 16 x1, y1 = x0 + w, y0 + h d.ellipse((x0, y0, x1, y1), brush) x0, y0 = 256 + 16, 256 + 128 x1, y1 = x0 + w, y0 + h d.ellipse((x0, y0, x1, y1), pen, brush) # text ... Error # fnt = aggdraw.Font("blue", "arial.ttf", size=24) # d.text((100, 100), "use aggdraw") d.flush() im.show() # im.save("./output_aggdraw2.png")
出力結果。
他にベジェ曲線も使えるらしい。
◎ aggdrawは文字描画できないっぽい :
aggdraw について Windws10 x64 1903 上で動作確認をしていたけれど、テキスト描画ができないことに気づいた。そもそもフォントを読み込むことができない…。
「OSError: cannot load font (no text renderer)」でググってみたけど、どうも freetype がどうとか、FREETYPE_ROOT = "/usr/local" がどうとか、そういう話が出てきて。
_aggdraw cannot load font (no text renderer) - Issue #664 - ejeschke/ginga
_python - aggdraw cannot load font (no text renderer) - Stack Overflow
_python - Installing Aggdraw with Freetype support - Stack Overflow
たぶんコレ、Linux環境で動かすことを前提にしてハードコーティングされてるとか、そういう話かなあ…。よく分からんけど。
つまり、この aggdraw は、Windows上で使えるライブラリではないよ、ということかもしれん…。
> py -3 04_aggdraw_type.py Traceback (most recent call last): File "04_aggdraw_type.py", line 67, in <module> fnt = aggdraw.Font("blue", "./arial.ttf", size=24) OSError: cannot load font (no text renderer)
「OSError: cannot load font (no text renderer)」でググってみたけど、どうも freetype がどうとか、FREETYPE_ROOT = "/usr/local" がどうとか、そういう話が出てきて。
_aggdraw cannot load font (no text renderer) - Issue #664 - ejeschke/ginga
_python - aggdraw cannot load font (no text renderer) - Stack Overflow
_python - Installing Aggdraw with Freetype support - Stack Overflow
たぶんコレ、Linux環境で動かすことを前提にしてハードコーティングされてるとか、そういう話かなあ…。よく分からんけど。
つまり、この aggdraw は、Windows上で使えるライブラリではないよ、ということかもしれん…。
◎ Pillowで文字描画する例。 :
一応念のため、Pillow の ImageDraw で文字描画ができるのか試してみた。
_05_imagedraw_text.py
出力結果。
Pillow の ImageDraw で、TTFフォントを使って文字描画をすると、ちゃんとアンチエイリアスがかかっているように見える。
ということは、文字描画に限って言えば、Pillow の ImageDraw で事足りる、aggdraw をわざわざ使わなくても済む、ということになるのだろうか…。
_05_imagedraw_text.py
from PIL import Image, ImageDraw, ImageFont im = Image.new('RGB', (512, 512), (255, 255, 255)) d = ImageDraw.Draw(im) fnt = ImageFont.truetype("./arial.ttf", 32) d.text((32, 64), "use ImageDraw", font=fnt, fill=(0, 0, 0)) d.text((32, 96), "use ImageDraw", font=fnt, fill=(128, 128, 128)) im.show() # im.save("./output_imagedrawtext.png")
出力結果。
Pillow の ImageDraw で、TTFフォントを使って文字描画をすると、ちゃんとアンチエイリアスがかかっているように見える。
ということは、文字描画に限って言えば、Pillow の ImageDraw で事足りる、aggdraw をわざわざ使わなくても済む、ということになるのだろうか…。
[ ツッコむ ]
以上です。