mieki256's diary



2019/11/03() [n年前の日記]

#1 [aggdraw][python] aggdraw についてまだ試用中

aggdraw について試用中。

環境は、Windows10 x64 + Python 3.7.5 32bit + Pillow 6.2.1 + aggdraw 1.3.11。

描画の種類を確認。 :

描画機能として、line(直線)、polygon(ポリゴン)、ellipse(楕円)、rectangle(矩形)等があるらしいのでテスト。

_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")

出力結果。

output_aggdraw2.png

他にベジェ曲線も使えるらしい。

aggdrawは文字描画できないっぽい :

aggdraw について Windws10 x64 1903 上で動作確認をしていたけれど、テキスト描画ができないことに気づいた。そもそもフォントを読み込むことができない…。

> 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
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")

出力結果。

output_imagedrawtext.png

Pillow の ImageDraw で、TTFフォントを使って文字描画をすると、ちゃんとアンチエイリアスがかかっているように見える。

ということは、文字描画に限って言えば、Pillow の ImageDraw で事足りる、aggdraw をわざわざ使わなくても済む、ということになるのだろうか…。

以上、1 日分です。

過去ログ表示

Prev - 2019/11 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project