canvg drawSvg()无法正确定位svg

时间:2017-07-14 11:45:24

标签: canvas svg canvg

我有这个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相同时,它也被绘制在错误的位置。

我尝试了很多策略,但他们没有奏效。请为此问题提出可行的解决方案。

1 个答案:

答案 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以反映更改,但其他人可以随意进行必要的更改,以便帮助其他人。