将嵌入式SVG转换为png时出现样式错误

Chuanqi Sun

我的高级目标是将<div>包含一些内嵌svg图像元素转换为png文件。必须使用JavaScript在客户端浏览器中执行所有操作。我试过了:

  1. 使用canvg库并按照这篇文章中的步骤操作:https : //github.com/niklasvh/html2canvas/issues/95#issuecomment-34439223

    原始svg:

    原始svg

    结果:

    canvg结果

  2. <svg>按照本文中的步骤将css样式展平到标记中,然后调用canvg:将嵌入式SVG就地转换为PNG

    结果:图像空白。

  3. <svg>按照本文中的步骤将css样式展平到标记中,然后手动将svg绘制到画布上:如何从浏览器保存/导出使用css样式的内联SVG从浏览器到图像文件

    结果:图像空白。

  4. 使用以下代码将CSS样式展平为嵌入式样式表:http : //spin.atomicobject.com/2014/01/21/convert-svg-to-png/

    结果:图像空白。

  5. 使用svg撬杠手动将<div>元素下载为.svg文件。

    结果:

    在此处输入图片说明

    然后,当我将原始svg的计算后的css与下载的svg进行比较时,我发现下载的svg具有正确的svg xml,但是内联样式表(<style type="text/css">)例如图表最右边的数字200、300与<text x="214" dy=".32em" y="0" style="text-anchor: start;">200</text>我的外部CSS一起绘制,我有:

    .scatterChart .axisGraphicsContext文本{font-size:8px; 填充:#777; }

    但是,下载的svg的内联样式表中没有font-size和fill属性。

人性化装

我一直在寻找自己的解决方案,以通过Rickshaw(基于D3)创建的CSS导出PNG。我发现的唯一解决方案是:

  • 将DIV与SVG区别对待,并分别对待
  • 将具有html2canvas的DIV(和其他非SVG内容)转换为canvas
  • 使CSS内联到SVG;@thirdcreed已在以下位置发布了JavaScript代码和D3选择器:JSDOM中的人力车CSS /轴-根据需要将其调整为自定义CSS。
  • 使用以下代码将SVG转换为画布

    var imgsrc = 'data:image/svg+xml;base64,'+ btoa(html2);
    var img = '<img src="'+imgsrc+'">';      
    var canvas = document.querySelector("canvas"),
    context = canvas.getContext("2d");      
    var image = new Image;
    image.src = imgsrc;
    image.onload = function() {
      context.drawImage(image, 0, 0);
    }
    
  • 将您拥有的不同画布合并为一个
  • 使用以下代码将其转换为图像:

    var canvasdata = canvas.toDataURL("image/png");
    var pngimg = '<img src="'+canvasdata+'">'; 
    d3.select("#pngdataurl").html(pngimg); // contains selector from D3, adjust if you don't use D3
    var a = document.getElementById("some_anchor"); // Fix for Firefox: supply an anchor-tag here that is 'display:none' in your document, otherwise download won't work
    a.download = "sample.png";
    a.href = canvasdata;
    a.click();
    

请注意,每个Internet Explorer浏览器都要求SVG具有xmlns属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

svg中的嵌入式图像在将svg转换为png时消失了

来自分类Dev

将文本阴影转换为嵌入式SVG样式的嵌入式阴影

来自分类Dev

将svg标签转换为图像中的嵌入式svg

来自分类Dev

将ArrayList嵌入式循环转换为迭代器

来自分类Dev

Mongo将嵌入式文档转换为数组

来自分类Dev

将链接的图像转换为嵌入式图像

来自分类Dev

使用javascript保持样式单位将CSS样式转换为嵌入式样式

来自分类Dev

转换嵌入式svg文件

来自分类Dev

转换为嵌入式红宝石

来自分类Dev

通过JavaScript将CSS样式转换为嵌入式样式

来自分类Dev

带有嵌入式SVG的HTML使用飞碟Itext蜡染转换为PDF

来自分类Dev

带有嵌入式SVG的HTML使用飞碟Itext蜡染转换为PDF

来自分类Dev

使用嵌入式PNG / JPG打印宽幅SVG图像

来自分类Dev

如何使用嵌入式Tomcat 8和Spring Boot将子域转换为路径

来自分类Dev

如何将内部具有嵌入式对象的对象列表转换为DataTable

来自分类Dev

在MongoDB中手动将嵌入式文档转换为引用

来自分类Dev

如何将包含嵌入式对象的字符串转换为对象类型?

来自分类Dev

JODConverter&LibreOffice:使用嵌入式图像将文档转换为html

来自分类Dev

将html原始文本转换为嵌入式文本(删除空格)Regex Javascript

来自分类Dev

如何将包含嵌入式对象的字符串转换为对象类型?

来自分类Dev

将具有嵌入式字体的PDF转换为PowerPoint的EMF

来自分类Dev

将SVG转换为PNG时包括字体

来自分类Dev

在构建gem时出现错误:“没有将String隐式转换为Integer”

来自分类Dev

尝试将Autofac加载为嵌入式程序集时出现FileNotFoundException

来自分类Dev

转换不适用于嵌入式SVG Chrome

来自分类Dev

如何在fabricjs中将画布转换为具有嵌入式图像base64的SVG

来自分类Dev

如何在fabricjs中将画布转换为具有嵌入式图像base64的SVG

来自分类Dev

如何将杂项文档转换为JSON,从而去除嵌入式文档ID,但保留主文档ID?

来自分类Dev

如何从嵌入式文档数组将mongodb中的ISO日期转换为'yyyy-mm-dd hh:mm:ss'?

Related 相关文章

  1. 1

    svg中的嵌入式图像在将svg转换为png时消失了

  2. 2

    将文本阴影转换为嵌入式SVG样式的嵌入式阴影

  3. 3

    将svg标签转换为图像中的嵌入式svg

  4. 4

    将ArrayList嵌入式循环转换为迭代器

  5. 5

    Mongo将嵌入式文档转换为数组

  6. 6

    将链接的图像转换为嵌入式图像

  7. 7

    使用javascript保持样式单位将CSS样式转换为嵌入式样式

  8. 8

    转换嵌入式svg文件

  9. 9

    转换为嵌入式红宝石

  10. 10

    通过JavaScript将CSS样式转换为嵌入式样式

  11. 11

    带有嵌入式SVG的HTML使用飞碟Itext蜡染转换为PDF

  12. 12

    带有嵌入式SVG的HTML使用飞碟Itext蜡染转换为PDF

  13. 13

    使用嵌入式PNG / JPG打印宽幅SVG图像

  14. 14

    如何使用嵌入式Tomcat 8和Spring Boot将子域转换为路径

  15. 15

    如何将内部具有嵌入式对象的对象列表转换为DataTable

  16. 16

    在MongoDB中手动将嵌入式文档转换为引用

  17. 17

    如何将包含嵌入式对象的字符串转换为对象类型?

  18. 18

    JODConverter&LibreOffice:使用嵌入式图像将文档转换为html

  19. 19

    将html原始文本转换为嵌入式文本(删除空格)Regex Javascript

  20. 20

    如何将包含嵌入式对象的字符串转换为对象类型?

  21. 21

    将具有嵌入式字体的PDF转换为PowerPoint的EMF

  22. 22

    将SVG转换为PNG时包括字体

  23. 23

    在构建gem时出现错误:“没有将String隐式转换为Integer”

  24. 24

    尝试将Autofac加载为嵌入式程序集时出现FileNotFoundException

  25. 25

    转换不适用于嵌入式SVG Chrome

  26. 26

    如何在fabricjs中将画布转换为具有嵌入式图像base64的SVG

  27. 27

    如何在fabricjs中将画布转换为具有嵌入式图像base64的SVG

  28. 28

    如何将杂项文档转换为JSON,从而去除嵌入式文档ID,但保留主文档ID?

  29. 29

    如何从嵌入式文档数组将mongodb中的ISO日期转换为'yyyy-mm-dd hh:mm:ss'?

热门标签

归档