缩小会破坏SVG到图像的转换

时间:2016-01-14 06:47:01

标签: angularjs svg minify

在我的角度应用程序中,我使用canvg将SVG转换为图像。在应用canvg之前,我将样式规则附加到序列化的svg字符串。见代码:

      var svg = document.getElementsByTagName("svg");
      var svgClone = svg[0].cloneNode(true);

      var viewbox = svgClone.getAttribute( 'viewBox' ).split( ' ' )


      var width = 2*viewbox[2] - viewbox[0];
      var height = 2*viewbox[3] - viewbox[1];


      svgClone.setAttribute("width",  width);
      svgClone.setAttribute("height", height);

      console.log(svgClone)
      var serializer = new XMLSerializer();
      var svgString;
      var canvas = document.getElementById("empty-canvas");
      var str;
      var styleTag;

      var style = "\n";

      for (var i = 1; i < document.styleSheets.length; i++) {

        str = document.styleSheets[i].href.split("/");

        if (str[str.length - 1] == "svg.css") {
          var rules = document.styleSheets[i].rules;
          if (!rules) {
            var rules = document.styleSheets[i].cssRules; //firefox
          };
          for (var j = 0; j < rules.length; j++) {
            style += (rules[j].cssText + "\n");
          }
          break;
        }
      }
      styleTag = "<style type='text/css'>" + style + "</style>";
      $(svgClone).prepend(styleTag);
      svgString = serializer.serializeToString(svgClone);

      canvg(canvas, svgString, {

        renderCallback: function() {
          var pngImage = canvas.toDataURL('image/png');
          $scope.image = pngImage;
        }
      });

这在开发模式下工作正常。但是,当我将所有js文件缩小为生产模式时,此代码似乎不再起作用,因为生成的图像缺少样式(某些颜色,字体大小等)。

我非常确定问题是缩小的代码没有预先设置样式标记,但我不确定如何解决它。

任何提示都表示赞赏 让

1 个答案:

答案 0 :(得分:0)

看起来这是指定文件的问题