mieki256's diary



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用しか公開されてないし、バージョンも古いみたいだから、最新版をインストールできる方法があるならそちらも試してみたいところ。

rounded_rectangleについて。 :

角丸矩形を描画してくれる rounded_rectangle() が pycairo には無くてちょっと悩んでしまったり。たぶんコレ、Ruby から cairo を使える rcairo というライブラリで、独自に追加実装された機能、なのではないかなと…。

どうやって実装するのだろうとググっていたら、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
rounded_rectangle_test_ss.png

ちゃんと角丸の四角になってくれた。

以上です。

過去ログ表示

Prev - 2017/04 - 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