D3.jsに基づいてhtml/jsで作成されたグラフ、チャート、マップなどを、出版物の印刷品質の高解像度で他のデータ形式に出力する方法はありますか?
これらのグラフのグラフィックは素晴らしいですが、紙に印刷して高度にピクセル化すると役に立たなくなります。ベクターやフォトショップ用にIllustratorでそれらを再プロットしないようにしています。
私が探している出力形式は、IllustratorまたはPhotoshopで読み取り可能である必要があります。そして、最も好ましくは、一度エクスポートされると、はるかに多くの視覚的な操作を必要としません。効果を得るためにカラーを再プロットまたはリフィルするか、フォトショップをやり直さなければならない場合、それは本当に目的を達成できません。
ありがとう!
より複雑な方法もありますが、すばやく簡単な方法は、DOMからsvg要素をコピーし(cssファイルも含める必要がある場合があります)、ファイルに貼り付けて、拡張子.svgを付けて保存することです。その後、ベクターエディターで開くことができます。
D3.jsの出力をpng
ファイルに変換する方法もあります。誰かが http://jsfiddle.net/plaliberte/HAXyd/ でcanvg
を使用してこれを行う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/
このツールを使用すると、Webサイトが任意のサイズの画面を見ているときにスクリーンショットを作成できます。静的なd3グラフの変換に最適です。それが私を助けてくれたので、それが誰かを助けることを望んでいます.
高解像度のラスターイメージに保存してよろしければ、Firefoxのアドオンであるパールクレセントページセーバーを使用するのが最善の方法です。
https://addons.mozilla.org/en-US/firefox/addon/pagesaver/
基本バージョンには、画像を拡大縮小するオプションがあります。 200%にスケーリングすると、.pngの解像度が単純なスクリーンショットで得られる解像度の2倍(4倍のピクセル)に増加します。
ベクトルが必要で、Illustratorでsvgをロードしてもうまくいかない場合は、超高解像度のpngにレンダリングしてから、Illustratorのライブトレースを使用してみてください...