【发布时间】:2016-09-10 14:00:24
【问题描述】:
有没有办法使用CanvasRenderingContext2D 将图像剪辑为 SVG 形状?
我正在尝试使用不同的 SVG 形状来按需显示图像的各个部分。
例如 - 带有 <ellipse> 元素(或等效的 <path>)的 SVG 将允许我显示图像的圆形部分。
CanvasRenderingContext2D.clip() 似乎与我所需要的很接近,但我找不到任何关于如何将它与 SVG 一起使用,或者如何将 SVG 绘制为路径的信息。
我正在考虑的另一个方向是将剪切区域保存为<path> 元素并手动将其转换为CanvasRenderingContext2D 等效方法,例如lineTo 和arc。
【问题讨论】:
-
svg 图像在画布上渲染时会变成光栅并丢失所有矢量信息。我能想到的两种方法来做你想做的事:首先解析你的 svg,然后使用 canvas API 来绘制这些形状(路径命令非常相似,所以它不是那么难,像 fabricjs 这样的库甚至可以很好地处理它你)或使用 globalCompositeOperation 而不是剪辑。但请注意,对于后者,Firefox 在将 gCO 直接应用于 svg 图像时存在错误,这会迫使您首先在第二个画布上绘制 svg;并且 Edge 之前的 IE 在绘制 svg 时会污染画布。
标签: javascript canvas svg clip