Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Canvas 如何将svg添加到画布,画布是对象的一部分_Canvas_Svg - Fatal编程技术网

Canvas 如何将svg添加到画布,画布是对象的一部分

Canvas 如何将svg添加到画布,画布是对象的一部分,canvas,svg,Canvas,Svg,我无法将svg图像添加到画布,画布是对象的一部分。如果我在window.onload函数中将此svg图像添加到画布中,它会工作,但如果我在中执行此操作 handObj.prototype.svgToBlob,不显示图像。如果我将svg复制并粘贴到html中,它会显示键盘的图像。 smth是否在范围内发生? 我怎样才能解决这个问题?我的意思是如何在画布上显示svg,从函数开始,这是对象原型的一部分 //Svg非常大,这是一个缩短的版本 <!DOCTYPE html> <svg

我无法将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"  >&#110;</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变得非常重要互动和灵活。