Raphael を使用してオブジェクトを描画し、canvg を使用して HTML キャンバス要素に転送し、toDataURL を使用して PNG として保存できるようにしています。しかし、canvg を使用すると、結果の画像がぼやけます。たとえば、以下のコードはこれを生成します (上が raphael、下が canvg):
<html>
<head>
<script src="lib/raphael-min.js"></script>
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/rgbcolor.js"></script>
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/StackBlur.js"></script>
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/canvg.js"></script>
<script src="lib/raphael.export.js"></script>
</head>
<body>
<div id="raph_canvas"></div><br>
<canvas id="html_canvas" width="50px" height="50px"></canvas>
<script language="JavaScript">
var test=Raphael("raph_canvas",50,50);
var rect=test.rect(0,0,50,50);
rect.attr({fill: '#fff000', 'fill-opacity':1, 'stroke-width':1})
window.onload = function() {
var canvas_svg = test.toSVG();
canvg('html_canvas',canvas_svg);
var canvas_html = document.getElementById("html_canvas");
}
</script>
</body>
</html>
ぼやけは、toDataURL によって作成された png でも明らかです。ここで何が起こっているのか分かりますか?サイズ直しとは関係ないと思います。ignoreDimensions: True などを設定してみました。
別のデータポイント。raphael を使用してテキストを出力してから canvg を使用すると、ぼやけるだけでなく、間違ったフォントになります!
そして、ここに test.rect(0.5,0.5,50,50) が提案されています。まだぼやけています: