clip
メソッドは SVG の clipPath
に対応する。
この SVG ファイルを生成する Python のコードは
#encoding: utf-8 import svg c = svg.Canvas(0,0,800,600,map=(-400,-300,400,300)) h = c.clip(id="C",clip="rule:nonezero") h.circle(0,0,r=200) c.image(-400,-300,400,300,clip="path:url(#C)",href="bird.jpg") c.close()
なお、例1でバックの白色が消えたのは、HTML5 の記述で style="background-color:white"
を指定していないからである。つまり
<object type="image/svg+xml" data="image.svg" width="80%" height="100%">となっている。
他の例は全て
<object type="image/svg+xml" data="clippath2.svg" width="80%" height="100%" style="background-color:white">となっているので、白色のバックグランドが背景に現れている。
文字を使ってもクリップできる。
この SVG ファイルを生成する Python のコードは
#encoding: utf-8 import svg c = svg.Canvas(0,0,800,600,map=(-400,-300,400,300)) h = c.clip(id="C",clip="rule:nonezero") h.text(0,0,text="ABC",font="size:256",anchor="C") c.image(-400,-300,400,300,clip="path:url(#C)",href="bird.jpg") c.close()
次の図形は、文字列 "ABC" を3つの図形でクリップしている。クリップの方法は
nonezero evenodd
evenodd
が指定されている。
この SVG ファイルを生成する Python のコードは
#encoding: utf-8 import svg from math import cos,sin,pi def star(x0,y0,r): t = [] for n in range(0,5): x = r*cos(pi/180*144*n) + x0 y = r*sin(pi/180*144*n) + y0 t = t + [x,y] return t t = star(100,150,60) c = svg.Canvas(0,0,400,300) #h = c.clip(id="MyClip",clip="rule:nonezero") h = c.clip(id="MyClip",clip="rule:evenodd") h.polygon(100,200,300,0,200,200) h.polygon(100,100,300,100,300,150) h.polygon(t) #h.end() c.text(200,150,text="ABC",font="Helvetica;size:128",anchor="C",clip="path:url(#MyClip)") c.polygon(100,200,300,0,200,200,stroke="red") c.polygon(100,100,300,100,300,150,stroke="blue") c.polygon(t) c.close()
クリップを行っているのは3つの polygon
である。これらは1つのグループに纏められ、そのグループに対して、クリップルール evenodd
が指定されている。
コメントアウトされている
h.end()
#
" を取り除いて、これを生かしてもよい。これを入れると、<clipPath id="MyClip" ....>
<text ... clip-path="url(#MyClip)">
SVG の clipPath
と言う名前は誤解を生む。SVG の path
タグを使わなくても、マスクに多様な図形が使える。例えば circle
も OK である。