Canvas 如何将svg添加到画布,画布是对象的一部分
我无法将svg图像添加到画布,画布是对象的一部分。如果我在Canvas 如何将svg添加到画布,画布是对象的一部分,canvas,svg,Canvas,Svg,我无法将svg图像添加到画布,画布是对象的一部分。如果我在window.onload函数中将此svg图像添加到画布中,它会工作,但如果我在中执行此操作 handObj.prototype.svgToBlob,不显示图像。如果我将svg复制并粘贴到html中,它会显示键盘的图像。 smth是否在范围内发生? 我怎样才能解决这个问题?我的意思是如何在画布上显示svg,从函数开始,这是对象原型的一部分 //Svg非常大,这是一个缩短的版本 <!DOCTYPE html> <svg
window.onload
函数中将此svg图像添加到画布中,它会工作,但如果我在中执行此操作
handObj.prototype.svgToBlob
,不显示图像。如果我将svg复制并粘贴到html中,它会显示键盘的图像。
smth是否在范围内发生?
我怎样才能解决这个问题?我的意思是如何在画布上显示svg,从函数开始,这是对象原型的一部分
//Svg非常大,这是一个缩短的版本
<!DOCTYPE html>
<svg xmlns="http://www.w3.org/2000/svg" width="1300" height="600">
<rect x="0" y="10" width="16" height="64" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)" />
<text x="16" y="31" font-family="Calibri" font-size="12" fill="white" id="r1b1" data-json="r1b1" data-modif="lowercase" >n</text>
</svg>
n
//日志结果
handObj.js:265 249 in timeout url=blob:http://localhost/bce88b61-edbe-4889-b131-6b2f36912560
handObj.js:266 250 img=[object HTMLImageElement]
handObj.js:267 <img src="blob:http://localhost/bce88b61-edbe-4889-b131-6b2f36912560">
The function which is part of object, and should disply svg on canvas.
handObj.prototype.svgToBlob = function () {
var DOMURL = window.URL || window.webkitURL || window;
this.genSvg();
var kbsv = this.svgStr; //generates valid svg, i can display it , but not on canvas
$("#tmp").html(kbsv); // displys svg
// keyboard image
var img1 = new Image();
var svg1 = new Blob( [kbsv], {type: 'image/svg+xml'} );
console.log('246 this.svgStr='+this.svgStr);
var url1 = DOMURL.createObjectURL(svg1);
console.log('247 url1='+url1);
var canvas = document.getElementById('canvas1');
var ctx = canvas.getContext('2d');
img1.onload = function() {
console.log('217 this.ctx='+ctx);
console.log('249 in timeout url='+url1);
console.log('250 img='+img1);
console.log(img1);
ctx.drawImage(img1, 0, 0);
DOMURL.revokeObjectURL(url1);
} // img1.onload = function() {
img1.src = url1;
} // handObj.prototype.svgToBlob = function () {
handObj.js:265 249 in timeout url=blob:http://localhost/bce88b61-edbe-4889-b131-6b2f36912560
js:266250 img=[object-HTMLImageElement]
handObj.js:267
该函数是对象的一部分,应该在画布上显示svg。
handObj.prototype.svgToBlob=函数(){
var DOMURL=window.URL | | window.webkitURL | | window;
这个.genSvg();
var kbsv=this.svgStr;//生成有效的svg,我可以显示它,但不能显示在画布上
$(“#tmp”).html(kbsv);//显示svg
//键盘图像
var img1=新图像();
var svg1=newblob([kbsv],{type:'image/svg+xml'});
log('246this.svgStr='+this.svgStr);
var url1=DOMURL.createObjectURL(svg1);
log('247url1='+url1);
var canvas=document.getElementById('canvas1');
var ctx=canvas.getContext('2d');
img1.onload=函数(){
console.log('217this.ctx='+ctx);
log('249 in timeout url='+url1);
log('250 img='+img1);
console.log(img1);
ctx.drawImage(img1,0,0);
revokeObjectURL(url1);
}//img1.onload=function(){
img1.src=url1;
}//handObj.prototype.svgToBlob=function(){
我还尝试根据以下内容添加名称空间a:
在这种情况下,svg并不是全部显示的,不仅从对象显示,而且在html页面中也显示
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg">
<head>
<title>TODO supply a title</title>
<meta http-equiv="Content-Type" content="text/html; charset="UTF-8">
</head>
<body>
<svg:svg id='display' width='400' height='300'>
<svg:circle id='cursor' cx='200'
cy='150' r='7' fill='#0000ff' fill-opacity='0.5'/>
</svg:svg> <br>
提供头衔
请显示您想要在画布上绘制的SVG源代码。我认为它有一些问题(没有大小,没有名称空间…)最有可能的是,这个斜纹解决了所有问题:我认为加载SVG是成功的。>如果我在window.onload函数中将此SVG图像添加到画布-它可以工作,但如果我在内部执行此操作:如果在绘制SVG后调整画布的大小,图形将被清除。请检查是否存在诸如canvas.width=200
或canvas.setAttribute之类的代码("200")
before window.onload.Thank you.我自己终于意识到我不需要画布。svg作为对象的一部分,足以实现所有惊人的功能。不知道为什么我要将其放在画布上。要在画布上实现任何移动,都是与路径等相关的复杂问题。而对象具有事件属性,因此svg变得非常重要互动和灵活。