Friday, April 10, 2009

pycairoで角丸四角でクリッピングして画像を描画する

pycairoで角丸四角でクリッピングして画像を描画するには、以下のコードを実行します。

# coding=UTF-8
import cairo
import math

img = cairo.ImageSurface.create_from_png("sf.png")
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)

x = 10
y = 10
w = 180
h = 180
r = 20

ctx.move_to(x+r, y)
ctx.line_to(x+w-r-1, y)
ctx.arc(x+w-r-1, y+r, r, -0.5*math.pi, 0)
ctx.line_to(x+w-1, y+h-r-1)
ctx.arc(x+w-r-1, y+h-r-1, r, 0, 0.5*math.pi)
ctx.line_to(x+r, y+h-1)
ctx.arc(x+r, y+h-r-1, r, 0.5*math.pi, math.pi)
ctx.line_to(x, y+r)
ctx.arc(x+r, y+r, r, math.pi, 1.5*math.pi)
ctx.close_path()
ctx.clip()
ctx.set_source_surface(img, 0, 0)
ctx.paint()
surface.write_to_png('sample1016a.png')

出力画像(sample1016a.png)
pycairoで角丸四角でクリッピングして描画した画像

動作環境
Python2.6.1, GTK+2.16.0, pycairo1.4.12-2

関連項目
pycairoのまとめ

pycairoをWindowsにインストール

No comments: