JavaScriptでsvgをpngに変換して保存する

d3.jsで作ったsvgpngに変換して保存する方法。

1.svgcanvasに描画。

GitHub - canvg/canvg: Javascript SVG parser and renderer on Canvas

canvg("canvas", "<svg>...</svg>" );

2.canvasをtoDataURL()で、Base64エンコードした文字列に変換。

toDataURL() メソッド - Canvasリファレンス - HTML5.JP

var png = document.getElementById("canvas").toDataURL();

3.pngとして保存。

いろいろ方法があるみたい。
chrome, firefoxではa要素にdownload属性をつけるとうまく1clickで保存できるので、無理やりリンクを生成してclickイベントを発生させている。

dot mapで使ったコード

$("#save-png").click(function(){
	$("#map").hide();
	$("#map-container").append(
	    '<canvas id="canvas" width="' + width + 'px" height="' + height + 'px"></canvas>'
	);
	canvg("canvas", $("#map").html() );

	var png = $("#canvas")[0].toDataURL("image/png");
	png = png.replace("image/png", "application/octet-stream");

	$("#map-container").append(
	    '<a id="png" type="application/octet-stream" href="" download="dotmap.png">saving...</a>'
	);
	$("#png").attr("href", png);
	$("#png")[0].click();

	$("#map").show();
	$("#canvas").remove();
	$("#png").remove();
});

dot mapをリリースしました。

ドットの日本地図に色塗りができるdot mapをリリースしました。

http://azuresky.fam.cx/d3/dotmap/
f:id:tattii:20130919070349p:plain

できること

  1. ドット日本地図に色塗り
  2. local strageに保存
  3. pngとしてダウンロード

例えば

今までに行ったことのある場所を地図に表してみると。
f:id:tattii:20130919064455p:plain

説明

すべてJavaScriptで動きます。
svgを扱うのが得意なd3.jsを使用して作成しました。

ブラウザ

chrome, firefox, safariに対応。
ただし、safariでpngとして保存するときは表示される画像を右クリックで保存して下さい。

cassandraエラー

cassandraを導入するときにエラーがいっぱい出てきたので、やったことのめも。

1.ログファイルのパーミッションを変更

/var/lib/cassandra/
にログファイルを作成するのでここに書き込めるようにパーミッションを変更。

2.メモリの使用量を調節

conf/cassandra-env.shのなかのMAX_HEAP_SIZEを減らす。