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 である。