2019/11/02(土) [n年前の日記]
#2 [aggdraw][python] aggdrawを試用してみた
Pillow の Image に、アンチエイリアスをかけた状態で図形描画等ができる、aggdraw なるライブラリがあるらしいので少し試用してみたり。
_aggdraw - PyPI
_pytroll/aggdraw: Python package wrapping AGG2 drawing functionality
_AggDraw - aggdraw 1.3.8 documentation
環境は、Windows10 x64 1903 + Python 2.7.17 + Pillow 6.2.1 + aggdraw 1.3.11。
インストールは、以下でいいのかな。たぶん。
_aggdraw - PyPI
_pytroll/aggdraw: Python package wrapping AGG2 drawing functionality
_AggDraw - aggdraw 1.3.8 documentation
環境は、Windows10 x64 1903 + Python 2.7.17 + Pillow 6.2.1 + aggdraw 1.3.11。
インストールは、以下でいいのかな。たぶん。
pip install aggdraw
◎ aggdrawで描いてみた事例。 :
_01_aggdraw.py
出力結果。
_output_aggdraw.png
アンチエイリアスがかかっている。
from PIL import Image import aggdraw import math # aggdraw im = Image.new('RGBA', (512, 512), (255, 255, 255, 255)) d = aggdraw.Draw(im) pen = aggdraw.Pen((0, 0, 0, 255), 2.0) # color, width cx, cy = 256, 256 for i in range(0, 360, 5): x = 240 * math.cos(math.radians(i)) + cx y = 240 * math.sin(math.radians(i)) + cy d.line((cx, cy, x, y), pen) d.flush() im.save("./output_aggdraw.png")
出力結果。
アンチエイリアスがかかっている。
◎ ImageDrawで描いてみた事例。 :
Pillow の ImageDraw を使って描いてみた事例。
_02_imagedraw.py
_output_imagedraw.png
アンチエイリアスがかかってないのが分かる。
_02_imagedraw.py
from PIL import Image, ImageDraw import math # ImageDraw im = Image.new("RGBA", (512, 512), (255, 255, 255, 255)) d = ImageDraw.Draw(im) cx, cy = 256, 256 for i in range(0, 360, 5): x = int(240 * math.cos(math.radians(i)) + cx) y = int(240 * math.sin(math.radians(i)) + cy) d.line((cx, cy, x, y), fill=(0, 0, 0, 255), width=2) im.save("./output_imagedraw.png")
アンチエイリアスがかかってないのが分かる。
◎ ImageDrawで描いてみた事例その2。 :
Pillow の ImageDraw を使って描いてみた事例。2倍のサイズで描いてから、1/2に縮小してみる。
_03_imagedraw2.py
_output_imagedraw2.png
若干それっぽくアンチエイリアスがかかったような雰囲気にはなっている。
_03_imagedraw2.py
from PIL import Image, ImageDraw import math # ImageDraw im = Image.new("RGBA", (1024, 1024), (255, 255, 255, 255)) d = ImageDraw.Draw(im) cx, cy = (256 * 2), (256 * 2) for i in range(0, 360, 5): x = int((240 * 2) * math.cos(math.radians(i)) + cx) y = int((240 * 2) * math.sin(math.radians(i)) + cy) d.line((cx, cy, x, y), fill=(0, 0, 0, 255), width=(2 * 2)) im.thumbnail((512, 512), Image.ANTIALIAS) im.save("./output_imagedraw2.png")
若干それっぽくアンチエイリアスがかかったような雰囲気にはなっている。
◎ 問題点。 :
aggdraw のライセンスがちょっとよくわからない。一般的なライセンスではないようで。
aggdraw が使っている AGG とやらにバグがあったりもするようで、例えば透明度を指定すると色が妙なことになる時もあるっぽい。
_Brush/Pen transparency weirdness - Issue #16 - pytroll/aggdraw
aggdraw が使っている AGG とやらにバグがあったりもするようで、例えば透明度を指定すると色が妙なことになる時もあるっぽい。
_Brush/Pen transparency weirdness - Issue #16 - pytroll/aggdraw
[ ツッコむ ]
以上です。