【发布时间】:2014-07-30 03:54:48
【问题描述】:
有没有更好的方法将呈现的 HTML 元素转换为可缩放且非像素化的 PNG 图像?
设计目标是以 HTML+CSS 呈现页面(简单,允许用户将文本复制/粘贴为数据表等),但将小部件复制/保存为图像以复制到 PowerPoint 等。对于其他原因,在 RIA 中的客户端执行此操作非常有帮助。
这没问题,使用html2canvas 将元素渲染到画布,将其转换为 PNG,然后在用户可以右键单击以保存或复制到剪贴板的对话框中显示它(http://jsfiddle.net/8ypxW/3/ 的 JSFiddle):
html2canvas($("#widget"), {
onrendered: function(canvas) {
document.body.appendChild(canvas);
// Convert and download as image
Canvas2Image.saveAsPNG(canvas);
$("#img-out").append(canvas);
}
});
唯一的挑战是图像明显模糊/像素化,尤其是在 Mac Retina 上,并且无法像 PNG 图像那样提供可缩放的文本。
我怀疑画布没有什么好办法,而且画布是基于像素的,但以前一直是错误的。 jQuery 或其他库还可以。仅现代浏览器也可以。即使只是提高像素分辨率也是有帮助的
通过 SVG 渲染是一种绕路,但如果可以在客户端进行渲染,也是一种选择。此链接表明它需要服务器端的东西:http://bl.ocks.org/mbostock/6466603
【问题讨论】:
-
“可缩放且非像素化的 PNG 图像”——您知道这些属性之间存在严重矛盾吗? PNG是一种像素格式。 “像 PNG 图像这样的可缩放文本在其他方面能够做到”——它不是。像 FireWorks 这样的应用程序可能会这样做,但它使用私人存储的数据来重新创建另一种大小的 PNG。
-
谢谢!其实这对我来说是新闻。读过PNG是一种无损压缩格式,但现在意识到它根本不会丢失像素。也许不应该对这部网络漫画读太多:lbrandy.com/assets/jpg_vs_png2.png
-
更新太久,根本问题是在 Retina 机器上将图像转换为 PNG 看起来比原始图像模糊。在这种情况下,使用 github.com/tsayen/dom-to-image 并将比例加倍
domToImage.toPng(view.el, {scale: 2}).then(function (imgUri) {...})解决了这种差异。
标签: javascript html png