gpt4 book ai didi

javascript - 如何从 Canvas 中保存图像

转载 作者:太空狗 更新时间:2023-10-29 14:43:13 24 4
gpt4 key购买 nike

最近我一直在尝试依靠 Webrtc 来创建一个照相亭,并且几乎完成了所有代码,除了我无法找到一种在捕获图像后保存图像的方法。

这是迄今为止我离实现目标最近的一次:

 <meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>fotogoof</title>
<link rel="Stylesheet" href="css/bootstrap.css"/>
<link rel="Stylesheet" href="css/style.css"/>
<script type="text/javascript">
window.onload = function () {
var img = document.getElementById('screenshot');
var button = document.getElementById('saveImage');
img.src = '';
img.onload = function () {
button.removeAttribute('disabled');
};
button.onclick = function () {
window.location.href = img.src.replace('image/png', 'image/octet-stream');
};
};
</script>
</head>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<h2 class="brand">Html5 Photobooth</h1>
</div>
</div>
</div>
<div class="container" id="body-wrap">
<div class="container" id="main">
<div class="span10">
<div id="video-container">
<canvas width="400" height="320" class="mask"></canvas>
<div id="counter">
</div>
</div>
<br><div id="pic-holder" class="pull-left"><img id="screenshot"></div></br>
<input id="saveImage" type="button" value="save image" disabled="disabled"/>
</div>
</div>
</div>
</div>

代码本质上是获取网络摄像头流并将其馈送到 Canvas 元素中。按下空格键会触发截屏,然后显示为图像。因为我无法提供正在下载的文件的确切来源,所以按钮只能在浏览器的另一个选项卡中打开图像,而不是正常运行。对于如何解决这个问题,我真的很感激。提前致谢。

我已经使用这段代码成功地从 Canvas 中捕获了图像中的流:

document.addEventListener ('keydown', function (event) {
if(event.keyCode == 32) {
document.querySelector('#screenshot').src = canvas.toDataURL('image/webp')
}
})

我想知道的是如何使用户能够从那里将图像保存到他们的计算机上。

最佳答案

如果我理解正确,您想要将图像下载(即提供一个保存对话框供用户选择位置)图像到用户的机器上?'

如果是这样,您可以使用此代码段:

function download(canvas, filename) {

/// create an "off-screen" anchor tag
var lnk = document.createElement('a'),
e;

/// the key here is to set the download attribute of the a tag
lnk.download = filename;

/// convert canvas content to data-uri for link. When download
/// attribute is set the content pointed to by link will be
/// pushed as "download" in HTML5 capable browsers
lnk.href = c.toDataURL();

/// create a "fake" click-event to trigger the download
if (document.createEvent) {

e = document.createEvent("MouseEvents");
e.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false,
false, 0, null);

lnk.dispatchEvent(e);

} else if (lnk.fireEvent) {

lnk.fireEvent("onclick");
}
}

现在您需要做的就是提供默认文件名并调用函数:

download(myCanvas, 'untitled.png');

如果您的意思不是将直接保存到用户的硬盘,那么出于安全原因您不能。

话虽如此,始终可以选择使用本地存储,例如文件 API 或索引数据库 - 但由于这些是沙盒,您和用户只能通过浏览器访问"file",所以也许不能太方便了。

关于javascript - 如何从 Canvas 中保存图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18480474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com