SVG - 如何将图像裁剪成圆圈?

时间:2012-12-03 20:50:55

标签: svg

我有点像SVG的菜鸟,但我一直在玩D3,并开始摒弃基础。

我想要实现的是拍摄方形图像并将其裁剪成圆圈 - 这将代表我想要绘制的树上的节点。

我能够通过为每个图像创建一个模式,然后用模式填充节点来实现这种效果。但是,当树上有多个节点时,这种方法的性能非常糟糕。

所以,我正在寻找一种不同的方法。我可以把一个普通的“图像”对象作为我的节点,但它们只是作为普通的矩形出现,显然,我想将它们渲染为圆形。任何人都有关于如何在保持性能的同时屏蔽/裁剪图像以达到我想要的效果的任何建议?

2 个答案:

答案 0 :(得分:34)

您可以使用剪辑路径like so

<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
  <clipPath id="clipCircle">
    <circle r="50" cx="50" cy="50"/>
  </clipPath>
  <rect width="100" height="100" clip-path="url(#clipCircle)"/>
</svg>

圆圈将从矩形中“切出”。

答案 1 :(得分:2)

如果您想使用D3生成与@ Thomas的回答以编程方式相同的html代码,您可以执行以下操作:

var svg = d3.select("body").append("svg")
  .attr("width", "100%")
  .attr("height", "100%");

svg.append("clipPath")
    .attr("id", "clipCircle")
  .append("circle")
    .attr("r", 50)
    .attr("cx", 50)
    .attr("cy", 50);

svg.append("rect")
    .attr("width", 100)
    .attr("height", 100)
    .attr("clip-path", "url(#clipCircle)");