【发布时间】:2014-08-15 05:08:15
【问题描述】:
我正在使用 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)。仍然模糊:
【问题讨论】:
-
如果矩形很大,它似乎不那么模糊。除此之外,我没有发现太多。
-
不做任何测试我想知道当笔画宽度为2px时结果是什么。我打赌你正在处理半像素问题。
-
toDataURL 代码是什么样的?确保它没有设置为 JPEG。 JPEG 不擅长线条艺术。
-
我无法为你提供这个 canvg 库(在这个问题之前从未听说过它).. 但在这里你可以看到它通常不是问题。 jsbin.com/liquxiyi/2
-
嘿,您在使用 Retina 设备吗?
标签: javascript canvas svg raphael canvg