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到画布,填充Canvg行并删除背景行?_Canvas_Svg_Canvg - Fatal编程技术网

Canvas SVG到画布,填充Canvg行并删除背景行?

Canvas SVG到画布,填充Canvg行并删除背景行?,canvas,svg,canvg,Canvas,Svg,Canvg,我正在尝试使用将SVG转换为画布。开箱即用非常好 原始SVG图 画布渲染 我很难弄明白: 为什么要写“填写”一行?似乎从第一个点到最后一个点绘制了一条线,但我似乎在canvg库中找不到它 背景线元素被删除:下面是一个示例 有人有什么想法吗?很高兴提供更多信息。谢谢 如何应用css样式?您的svg有多个类吗? 这些在canvg中无法正常工作,请参阅此问题: 还有我附带的快速修复(测试不太好) /@第736行,替换为: //添加类样式 if(this.attribute('class').ha

我正在尝试使用将SVG转换为画布。开箱即用非常好

原始SVG图

画布渲染

我很难弄明白:

  • 为什么要写“填写”一行?似乎从第一个点到最后一个点绘制了一条线,但我似乎在canvg库中找不到它
  • 背景线元素被删除:下面是一个示例

  • 有人有什么想法吗?很高兴提供更多信息。谢谢

    如何应用css样式?您的svg有多个类吗? 这些在canvg中无法正常工作,请参阅此问题:

    还有我附带的快速修复(测试不太好)

    /@第736行,替换为:
    //添加类样式
    if(this.attribute('class').hasValue()){
    //检查多个类
    // ()
    //使用css.big.green{fill:green;r:big;}
    //我们不假设svg中的元素是排序的,所以我们检查
    //.大.绿色和.绿色.大
    //TODO:如果分类的话,可以减少这里的工作量。。
    //生成所有可能的组合,无重复,但考虑排序
    //组合2(['aa','bb','cc']))
    //[“.aa”、“.aa.bb”、“.aa.bb.cc”、“.aa.cc”、“.aa.cc.bb”、“.bb.aa”、“.bb.aa.cc”、“.bb.cc.aa”、“.bb.cc.aa”、“.cc.aa.bb”、“.cc.bb”、“.cc.bb”、“.cc.bb.aa”、“.cc.aa”]
    var comb2=功能组合(arr){
    var fn=功能(活动、静止、全部){
    如果(活动!=''{all.push(活动);}
    
    对于(var i=0;i)绘制图表数据线的路径或多段线元素,是否有:fill=“无”是的。CSS是
    fill:none;stroke:black;stroke opacity:.25;形状渲染:crispEdge;
    …但是删除
    fill:none;
    并不能修复它。其他想法?谢谢@markE!你能帮我修改一下你的代码吗?
    // @ line 736, replace with:
    // add class styles
    if (this.attribute('class').hasValue()) {
    
      // check for multiple classes
      // (<circle class="big green">)
      // with css .big.green {fill:green;r:big;}
    
      // we dont assume the elements in svg.Styles are sorted, so we check
      // .big.green and .green.big
      // TODO: if its sorted, one could reduce the work done here..
    
      // generates all possible combination, no doublicates, but taking ordering into account
      // comb2(['aa','bb', 'cc'])
      // [".aa", ".aa.bb", ".aa.bb.cc", ".aa.cc", ".aa.cc.bb", ".bb", ".bb.aa", ".bb.aa.cc", ".bb.cc", ".bb.cc.aa", ".cc", ".cc.aa", ".cc.aa.bb", ".cc.bb", ".cc.bb.aa"]
      var comb2 = function combinations(arr) {
        var fn = function(active, rest, all) {
          if (active != ''){all.push(active);}
          for (var i=0; i<rest.length;++i){
            fn(active + '.'+rest[i], [].concat(rest.slice(0,i), rest.slice(i+1)), all);
          }
          return all;
        }
        return fn('', arr, []);
      }
    
      var classes = svg.compressSpaces(this.attribute('class').value).split(' ');
    
      classes = comb2(classes);
    
      for (var j=0; j<classes.length; j++) {
        styles = svg.Styles[classes[j]];
        if (styles != null) {
          for (var name in styles) {
            this.styles[name] = styles[name];
          }
        }
        styles = svg.Styles[node.nodeName+classes[j]];
        if (styles != null) {
          for (var name in styles) {
            this.styles[name] = styles[name];
          }
        }
      }
    }