有没有办法将基于 d3.js 的 html/js 中创建的图形、图表、地图等输出为具有出版物打印质量高分辨率的其他数据格式?
这些图表的图形非常棒,但是当打印在纸上并且高度像素化时将毫无用处。我试图避免在 Illustrator 中为矢量或 Photoshop 重新绘制它们。
我正在寻找的输出格式应该可以被 Illustrator 或 Photoshop 读取。并且最好在导出后不需要更多的视觉操作。如果我必须重新绘制或重新填充颜色或重新拍照以获得效果,那真的会违背目的。
谢谢!
有没有办法将基于 d3.js 的 html/js 中创建的图形、图表、地图等输出为具有出版物打印质量高分辨率的其他数据格式?
这些图表的图形非常棒,但是当打印在纸上并且高度像素化时将毫无用处。我试图避免在 Illustrator 中为矢量或 Photoshop 重新绘制它们。
我正在寻找的输出格式应该可以被 Illustrator 或 Photoshop 读取。并且最好在导出后不需要更多的视觉操作。如果我必须重新绘制或重新填充颜色或重新拍照以获得效果,那真的会违背目的。
谢谢!
还有更复杂的方法,但一种快速、简单的方法是从 DOM 中复制 svg 元素(您可能还需要包含 css 文件),将其粘贴到文件中并使用扩展名 .svg 保存。之后,您可以在矢量编辑器中打开它。
还有一些方法可以将 d3.js 输出转换为png
文件。canvg
有人在http://jsfiddle.net/plaliberte/HAXyd/上整理了一个 jsfiddle 。
现代浏览器支持download
链接属性。如果您使用该属性创建指向图像的链接download
,浏览器将下载它而不是在浏览器中打开它。
由于没有要下载的实际文件,您所要做的就是将您的 svg 字符串编码为 data-uri,您所要做的就是......
var download = d3.select("body").append("a").attr("href", "#")
download.on("click", function(){
d3.select(this)
.attr("href", 'data:application/octet-stream;base64,' + btoa(d3.select("#viz").html()))
.attr("download", "viz.svg")
})
你可以在这里看到一个演示http://bl.ocks.org/3831266你可以在 illustrator 中打开下载的文件没有任何问题。
但是有几个问题:您必须内联声明您的样式(您不能使用外部 css 样式表进行样式设置)。
一个快速而肮脏的解决方案是将 svg 代码输出到警报框:
download.on("click", function(){
alert(d3.select("#viz").html())
});
并将警报复制到文本文件中并另存为 svg。
对于我的 d3 图,建议的解决方案效果不佳。生成的导出 SVG 的某些属性(例如渐变)未正确呈现,并且看起来与 Chrome 显示的非常不同。
在我的情况下,图像是静态的,所以截图就足够了。但是,屏幕截图仅限于您正在使用的显示器的大小。但是,我很高兴找到了一个替代解决方案,webkit2png: http: //www.paulhammond.org/webkit2png/
该工具允许在任意大小的屏幕上创建网站的屏幕截图。它非常适合转换静态 d3 图。我希望它可以帮助别人,因为它帮助了我。
如果您愿意保存为高分辨率光栅图像,我发现最好的解决方案是使用 Pearl Crescent Page Saver,一个 Firefox 插件:
https://addons.mozilla.org/en-US/firefox/addon/pagesaver/
基本版本为您提供了缩放图像的选项 - 例如,缩放到 200% 将使 .png 的分辨率增加一倍(像素数的 4 倍),您可以通过简单的屏幕截图获得。
如果您需要矢量,并且在 Illustrator 中加载 svg 不适合您,您可以尝试渲染为超高分辨率 png,然后使用 Illustrator 的实时跟踪...