2017/04/26(水) [n年前の日記]
#1 [python] pycairoを勉強中
_先日書いたドット絵モドキを生成するRubyスクリプト
を、Pythonで書き直し中。
ちなみに、python で cairo を使いたいなら、pycairo というライブラリを導入すればOK…なんだけど、Windows上ではインストール方法が…。
とりあえず自分は、 _PyGTK 経由で、 _http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/ から pygtk-all-in-one をDLしてインストールして済ませてしまった、ような気がするけど、どうだったかな…。たしかそのはず…。昔、GIMP で Python-Fu を動かす時にはコレが必要だったので、ついでに Python 2.7用もインストールしたのではなかったかな…。まあ、Python 2.6/2.7用しか公開されてないし、バージョンも古いみたいだから、最新版をインストールできる方法があるならそちらも試してみたいところ。
ちなみに、python で cairo を使いたいなら、pycairo というライブラリを導入すればOK…なんだけど、Windows上ではインストール方法が…。
とりあえず自分は、 _PyGTK 経由で、 _http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/ から pygtk-all-in-one をDLしてインストールして済ませてしまった、ような気がするけど、どうだったかな…。たしかそのはず…。昔、GIMP で Python-Fu を動かす時にはコレが必要だったので、ついでに Python 2.7用もインストールしたのではなかったかな…。まあ、Python 2.6/2.7用しか公開されてないし、バージョンも古いみたいだから、最新版をインストールできる方法があるならそちらも試してみたいところ。
◎ rounded_rectangleについて。 :
角丸矩形を描画してくれる rounded_rectangle() が pycairo には無くてちょっと悩んでしまったり。たぶんコレ、Ruby から cairo を使える rcairo というライブラリで、独自に追加実装された機能、なのではないかなと…。
どうやって実装するのだろうとググっていたら、cairo の使用サンプルソースに、同じ処理をするものがあった。
_rounded rectangle
参考にして、Python + pycairo で書き直してみたり。
_rounded_rectangle_test.py
以下で実行すると、描画結果を result.png として出力する。
ちゃんと角丸の四角になってくれた。
どうやって実装するのだろうとググっていたら、cairo の使用サンプルソースに、同じ処理をするものがあった。
_rounded rectangle
参考にして、Python + pycairo で書き直してみたり。
_rounded_rectangle_test.py
u"""
pycairoの動作テスト.
角が丸い四角を描画して、pngで保存。
動作確認環境:
Windows10 x64 + Python 2.7.13 32bit + pycairo 1.8.10
"""
import cairo
import math
def draw_rounder_rectangle(ctx, x, y, w, h, ra):
"""Set sub path rounded rectangle."""
deg = math.pi / 180.0
ctx.new_sub_path()
ctx.arc(x + w - ra, y + ra, ra, -90 * deg, 0 * deg)
ctx.arc(x + w - ra, y + h - ra, ra, 0 * deg, 90 * deg)
ctx.arc(x + ra, y + h - ra, ra, 90 * deg, 180 * deg)
ctx.arc(x + ra, y + ra, ra, 180 * deg, 270 * deg)
ctx.close_path()
w, h = 640, 480
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
ctx = cairo.Context(surface)
ctx.set_antialias(cairo.ANTIALIAS_SUBPIXEL)
ctx.set_line_width(6.0)
x, y = 24, 24
w, h = 480, 320
radius = 32
draw_rounder_rectangle(ctx, x, y, w, h, radius)
ctx.set_source_rgb(0, 0, 1)
ctx.fill_preserve()
ctx.set_source_rgb(0, 1, 0)
ctx.stroke()
surface.write_to_png("result.png")
以下で実行すると、描画結果を result.png として出力する。
python rounded_rectangle_test.py
ちゃんと角丸の四角になってくれた。
[ ツッコむ ]
以上です。
