是否可以将 html 画布中显示的内容捕获或打印为图像或 pdf?
我想通过画布生成图像,并且能够从该图像生成 png。
是否可以将 html 画布中显示的内容捕获或打印为图像或 pdf?
我想通过画布生成图像,并且能够从该图像生成 png。
oop。原始答案是针对类似问题的。这已被修改:
var canvas = document.getElementById("mycanvas");
var img = canvas.toDataURL("image/png");
使用 IMG 中的值,您可以将其写为新图像,如下所示:
document.write('<img src="'+img+'"/>');
HTML5 提供了在 Opera、Firefox 和 Safari 4 beta 中实现的 Canvas.toDataURL(mimetype)。但是,存在许多安全限制(主要是将来自另一个来源的内容绘制到画布上)。
所以你不需要额外的库。
例如
<canvas id=canvas width=200 height=200></canvas>
<script>
window.onload = function() {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.fillStyle = "green";
context.fillRect(50, 50, 100, 100);
// no argument defaults to image/png; image/jpeg, etc also work on some
// implementations -- image/png is the only one that must be supported per spec.
window.location = canvas.toDataURL("image/png");
}
</script>
从理论上讲,这应该创建然后导航到中间带有绿色方块的图像,但我还没有测试过。
我想我会稍微扩展一下这个问题的范围,在这个问题上有一些有用的花絮。
为了将画布作为图像,您应该执行以下操作:
var canvas = document.getElementById("mycanvas");
var image = canvas.toDataURL("image/png");
您可以使用它来将图像写入页面:
document.write('<img src="'+image+'"/>');
其中“image/png”是一种 mime 类型(png 是唯一必须支持的类型)。如果你想要一个受支持类型的数组,你可以按照以下方式做一些事情:
var imageMimes = ['image/png', 'image/bmp', 'image/gif', 'image/jpeg', 'image/tiff']; //Extend as necessary
var acceptedMimes = new Array();
for(i = 0; i < imageMimes.length; i++) {
if(canvas.toDataURL(imageMimes[i]).search(imageMimes[i])>=0) {
acceptedMimes[acceptedMimes.length] = imageMimes[i];
}
}
您只需要每页运行一次 - 它永远不会在页面的生命周期中发生变化。
如果您希望用户在保存文件时下载文件,您可以执行以下操作:
var canvas = document.getElementById("mycanvas");
var image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream"); //Convert image to 'octet-stream' (Just a download, really)
window.location.href = image;
如果您将它用于不同的 mime 类型,请务必更改 image/png 的两个实例,但不要更改 image/octet-stream。还值得一提的是,如果在渲染画布时使用了任何跨域资源,在尝试使用 toDataUrl 方法时会遇到安全错误。
function exportCanvasAsPNG(id, fileName) {
var canvasElement = document.getElementById(id);
var MIME_TYPE = "image/png";
var imgURL = canvasElement.toDataURL(MIME_TYPE);
var dlLink = document.createElement('a');
dlLink.download = fileName;
dlLink.href = imgURL;
dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':');
document.body.appendChild(dlLink);
dlLink.click();
document.body.removeChild(dlLink);
}
我会使用“ wkhtmltopdf ”。它只是很好用。它使用webkit引擎(用于Chrome、Safari等),使用起来非常简单:
wkhtmltopdf stackoverflow.com/questions/923885/ this_question.pdf
就是这样!