首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >canvg drawSvg()无法正确定位svg

canvg drawSvg()无法正确定位svg
EN

Stack Overflow用户
提问于 2017-07-14 19:45:24
回答 1查看 556关注 0票数 0

我有这个svg

代码语言:javascript
复制
<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

代码语言:javascript
复制
<canvas id="myCanvas1" width="935" height="768"></canvas>

我正在使用canvg库

我已经为此创建了一个小提琴

代码语言:javascript
复制
https://jsfiddle.net/jnwmudwc/1/. 

这清楚地表明,源svg在画布上绘制时应该达到相同的位置,但它没有。

即使在drawingContext.drawSvg()方法中使用的坐标与源svg相同,它也会被绘制在错误的位置。

我已经尝试了相当多的策略,但它们都不起作用。请为这个问题提出一个可行的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2017-07-21 13:59:27

好的,在经历了许多痛苦之后,我有了一个解决方案。我想分享这一点,这样其他人就不必像我一样面临同样的麻烦了。

用drawingContext.drawImage()替换drawingContext.drawSvg()解决了这个问题。

代码语言:javascript
复制
        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有多种颜色时,这些svg在画布上呈现为黑色。

我也在试图找到一个解决方案,同时我希望你们中的一些人能指出这是哪里出了问题。

我无法更新jsfiddle以反映更改,但其他人可以随意进行必要的更改,以便它可以帮助其他人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45102177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档