是否可以捕获或打印html画布中显示的图像或pdf?
我希望通过画布生成图像,并能够从该图像生成png。
是否可以捕获或打印html画布中显示的图像或pdf?
我希望通过画布生成图像,并能够从该图像生成png。
当前回答
在某些版本的Chrome上,您可以:
使用绘制图像函数ctx.drawImage(image1,0,0,w,h);在画布上单击鼠标右键
其他回答
从<canvas/>上载图像:
async function canvasToBlob(canvas) {
if (canvas.toBlob) {
return new Promise(function (resolve) {
canvas.toBlob(resolve)
})
} else {
throw new Error('canvas.toBlob Invalid')
}
}
await canvasToBlob(yourCanvasEl)
最初的答案是针对一个类似的问题。已修订如下:
const canvas = document.getElementById('mycanvas')
const img = canvas.toDataURL('image/png')
使用IMG中的值,您可以将其写入新图像,如下所示:
document.getElementById('existing-image-id').src = img
or
document.write('<img src="'+img+'"/>');
HTML5提供Canvas.toDataURL(mimetype),它在Opera、Firefox和Safari4测试版中实现。然而,有许多安全限制(主要是与将内容从另一个来源绘制到画布上有关)。
因此,您不需要额外的库。
e.g.
<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>
理论上,这应该创建一个中间有绿色方块的图像,然后导航到该图像,但我还没有进行测试。
简单的答案就是获取它的blob并将imgsrc设置为该blob的新对象URL,然后使用一些库将该图像添加到PDF中,例如
var ok=document.createElement(“画布”)正常宽度=400ok.height=140var ctx=ok.getContext(“2d”);for(设k=0;k<ok.height;k++)(k% 数学楼层((数学.随机()) *10)== 0)&&(y=>){对于(var i=0;i<ok.width;i++){如果(i%25==0){ctx.globalAlpha=数学随机()ctx.fillStyle=(“rgb(”+数学random()*255+“,”+数学random()*255+“,”+数学random()*255+“)”);(wdth=>ctx.fill矩形(数学.sin(i*数学.PI/180) * 数学.随机()*ok宽度,数学科(i*数学PI/180,)*wdth+y,wdth中,世界贸易组织))(15)}}})(k)ok。toBlob(blob=>{k.src=URL.createObjectURL(blob)})<img id=k>
或者,如果您想使用低级字节数据,可以获取画布的原始字节,然后根据文件规范将原始图像数据写入数据的必要字节。您只需要调用ctx.getImageData(0,0,ctx.canvas.widht,ctx.画布.height)来获取原始图像数据,然后根据文件规范将其写入
我会使用“wkhtmltopdf”。它工作得很好。它使用webkit引擎(在Chrome、Safari等中使用),并且非常容易使用:
wkhtmltopdf stackoverflow.com/questions/923885/ this_question.pdf
就是这样!
试试看