是否有一个用于将SVG转换为支持字体元素的HTML画布的好库?我已经尝试过canvg,但它不支持Font。在支持字体元素的HTML5画布上绘制SVG
回答
支持HTML5 Canvas的浏览器也很好地支持SVG。因此,你可以这样做:
var img = new Image;
img.onload = function(){ myCanvasContext.drawImage(img,0,0); };
img.src = "foo.svg";
唯一的缺点这种方法是,如果SVG是你的域之外的画布将成为污点;如果这是您的目标,您将无法使用getImageData()
来读取所产生的SVG。
,我已经把我的服务器上这种技术的一个例子:http://phrogz.net/tmp/canvas_from_svg.html
我测试过这一点,并验证了它的工作原理(和看起来一样)上IE9,Chrome的V11B,Safari浏览器V5和Firefox 4版。
[编辑]需要注意的是:
Chrome和Firefox目前的安全 '平底船',并从阅读画布(如these have been fixedgetImageData()
或toDataURL()
)绘制 任何 SVG后不允许你画布(不管域名)Firefox目前有一个错误e除非SVG指定了
height
和width
属性,否则它拒绝将SVG绘制到画布上。
如果你已经在SVG嵌入到HTML或作为原料源可以使用一个数据的URL到SVG转换为您然后可以在画布上绘制一个HTML图像元素:
var img = new Image();
// here attach an onload handler that draws the image on the canvas
// svgSource is the raw svg xml
img.src = "data:image/svg+xml," + encodeURIComponent(svgSource);
请注意,对于复杂的SVG内容,可能会遇到数据的大小限制:URI - 在我的情况下,这意味着我没有除了使用canvg来绘制复杂的SVG之外的其他选项。 – 2014-08-01 09:34:30
我刚试过一个简单的img标签,Phrogs的方法和canvg。我的SVG有一个嵌入式PNG。这只适用于canvg。其他人展示了没有嵌入PNG的图像。这是在Android Jellybean上使用标准浏览器或Chrome。
- 1. html5动画画布已绘制元素
- 2. 在画布上绘制SVG
- 3. 在画布上绘制旋转元素
- 4. 在控制台上绘制HTML5画布
- 5. 在HTML5的画布上绘制图像
- 6. HTML5画布绘制
- 7. 绘制到画布%元素
- 8. 在隐藏的html5画布元素中绘制不起作用
- 9. HTML5 - 超时后在画布上绘制
- 10. 在HTML5画布上绘制虚线?
- 11. 在HTML5画布上绘制图像
- 12. 在HTML5画布上绘制视频
- 13. 在html5画布上绘制图像
- 14. 绘制单个像素线HTML5画布
- 15. 如何在html5画布上绘制圆柱体
- 16. 加快在HTML5画布元素上绘制多个点的步骤
- 17. HTML5画布绘制拖放
- 18. 连续绘制HTML5画布
- 19. html5画布绘制/保存
- 20. HTML5画布绘制图像
- 21. JavaScript拖动绘制的画布元素
- 22. HTML5支持哪些元素?
- 23. 在画布上绘制像素椭圆
- 24. 打印HTML5画布元素
- 25. HTML5画布元素样式?
- 26. 了解HTML5画布元素
- 27. 移动HTML5画布元素
- 28. 定位HTML5画布元素
- 29. 在HTML5画布上绘制CSS圆角文字
- 30. 在HTML5画布上绘制旋转文字
这不适用于firefox – Nilesh 2011-05-02 19:00:45
@Nilesh什么操作系统和FireFox的版本?它适用于我在Windows 7上使用FF4.0。 – Phrogz 2011-05-02 19:45:55
我在JavaScript中有一个svg作为字符串。我使用它像'img.src =“data:image/svg + xml,”+ svgString;'它使用chrome,但firefox拒绝解析'svgString'变量,因为我嵌入了CDATA样式。 更新:使用encodeURIComponent(svgString)解决 – arunkjn 2013-11-21 13:17:39