我有这个svg
<div style="width: 84px; height: 78px; position: absolute; margin: 0px auto; left: 88px; top: 67px;">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 138 138" style="position: relative; left: 0px; top: 0px; width: 100%; height: 100%; enable-background:new 0 0 138 138;">
<defs>
<filter id="blurFilter1" y="-10" height="40" x="-10" width="150">
<feOffset in="SourceAlpha" dx="3" dy="3" result="offset2"></feOffset>
<feGaussianBlur in="offset2" stdDeviation="3" result="blur2"></feGaussianBlur>
<feMerge>
<feMergeNode in="blur2"></feMergeNode>
<feMergeNode in="SourceGraphic"></feMergeNode>
</feMerge>
</filter>
</defs>
<g filter="url(#blurFilter1)">
<rect class="rrfNode" x="0" y="0" width="130" height="130" fill="rgb(235,129,48)" rx="15" ry="15" stroke="black" stroke-width="0.5"></rect>
<text style="font-size:25px; font-family: 'Lora', serif;" x="50%" y="50%" stroke="none" text-anchor="middle" fill="white" dy=".3em">C-Corp1</text>
<rect x="12" y="15" width="110" height="30" rx="15" ry="15" stroke-width="0.5" stroke-opacity="0" fill="rgb(255,255,0)" fill-opacity="0.8" visibility="visible"></rect>
<text style="font-size:25px; font-family: 'Lora', serif;" y="25%" x="50%" stroke="none" text-anchor="middle" fill="red" dy=".3em" visibility="visible">New</text>
</g>
</svg>
</div>
我想在画布上的相同位置画布这个svg
<canvas id="myCanvas1" width="935" height="768"></canvas>
我正在使用canvg库
我在
为此创造了一个小提琴https://jsfiddle.net/jnwmudwc/1/.
这清楚地表明,当在画布上绘制时,源svg应该达到相同的位置,但事实并非如此。
即使在drawingContext.drawSvg()方法中使用坐标与源svg相同时,它也被绘制在错误的位置。
我尝试了很多策略,但他们没有奏效。请为此问题提出可行的解决方案。
答案 0 :(得分:1)
在经历了很多痛苦之后,我有一个解决方案。我想分享这个,以便其他人不必像我一样面对同样的麻烦。
用drawingContext.drawImage()替换drawingContext.drawSvg()解决了这个问题。
var nd = $("#node1").find("svg")[0].outerHTML;
var img = new Image();
img.src = "data:image/svg+xml;base64,"+btoa(nd);
img.onload = function(){
WPBContext.drawImage(img, x, y , w, h);
}
正如您所看到的那样,我将div中包含的svg转换为base64编码的字符串,然后调用drawImage()函数。
我想说虽然这解决了我的问题,但是当svg不是几何形状或者svg有多种颜色时,那些svgs会在画布上以黑色呈现。
我也试图找到解决方案,我希望你们中的一些人可以指出这个问题。
我无法更新jsfiddle以反映更改,但其他人可以随意进行必要的更改,以便帮助其他人。