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
ちゃんと角丸の四角になってくれた。
[ ツッコむ ]
以上です。