在Windows 8.1平板电脑上的Web应用程序中捕获图像
我即将开发在Windows 8.1平板电脑上运行的应用程序。 一个重要的功能是能够点击一个按钮访问相机拍摄一些照片。 理想情况下,由于许多原因(许可证,跨平台,开发时间:没有本地应用程序的经验等),我希望将其创建为Web应用程序而不是本机应用程序。
我查看了从HTML 5捕获图像的选项,并找到了HTML Media Capture,它允许我编写:
<input type="file" accept="image/*" capture="camera" />
要访问相机。 这适用于iPad和Android平板电脑,但我无法在Windows 8平板电脑上运行。 我曾尝试在Windows 8平板电脑上使用Chrome,但仍无效。 它所做的只是打开一个文件对话框,我可以在其中选择要上传的文件。 我想要做的是能够捕捉到新的图像。 IE不支持此标准(显然,其他浏览器也无法访问设备的摄像头)。
我也偶然发现了Media Capture和Streams,它似乎主要与显示来自网络摄像头的流有关,但可能用于捕获图像,Chrome和Firefox支持其他浏览器,但仍不支持Internet Explorer(甚至IE11)。 尽管三种浏览器的实现似乎都不能在我的Windows 8.1测试机器上运行。 如果有人在任何浏览器中使用getUserMedia在Windows 8平板电脑上工作,我有兴趣了解它。
无论如何,我的主要问题是:是否有任何方式使用Web应用程序中的HTML5访问Windows 8平板电脑上的相机? 我见过的唯一工作示例依赖于使用Active X或使用Flash的解决方案的IE原型实现。
编辑:我非常希望保持它在HTML5 / JavaScript,因为它必须脱机工作(使用HTML5应用程序缓存)
我为这个解决方案付出了很大的努力,最终我找到了一个很好的解决方案。 但只能在Windows 8应用程序中使用,例如chrome windows 8模式(chrome设置 - >在windows 8模式下重新启动chrome),那么您可以在html中使用正常的文件输入标记。 当你点击“选择文件”时,你会看到下面的图片。 然后,你可以选择相机从相机添加图像。
如果你在列表中看不到相机,你可以在下面安装应用程序。
https://www.microsoft.com/en-US/store/apps/Camera-File-Open-Picker/9WZDNCRFJQVN
所以我遇到了完全相同的问题。 我的网络应用程序与此类似,但必须使用平板电脑的相机执行条码扫描。
正如您所评论的,我使用的是HTML 5媒体API。 为了在Windows 8 Surface Pro中使用chrome,我必须这样做:
要在Chrome中启用getUserMedia,请在URL栏中键入'chrome:// flags /'并启用“在getUserMedia()中启用屏幕截图支持”。 Mac,Windows,Linux,Chrome OS“选项。
它在我的笔记本电脑上工作,但不是在平板电脑上,在进行了更改并重新启动它的工作后。 祝你好运。
这是我最终用来解决这种情况的代码......它似乎在Chrome中工作得很好,但仍然不支持已知不支持getUserMedia的Internet Explorer。 再次,我希望这不是必要的,Windows只支持像iOS和Android这样的拍照功能,但它现在可行。
信用:http://davidwalsh.name/browser-camera
// Put event listeners into place
window.addEventListener("DOMContentLoaded", function() {
// Grab elements, create settings, etc.
var canvas = document.getElementById("canvas"),
context = canvas.getContext("2d"),
video = document.getElementById("video"),
videoObj = { "video": true },
errBack = function(error) {
console.log("Video capture error: ", error.code);
};
// Put video listeners into place
if(navigator.getUserMedia) { // Standard
navigator.getUserMedia(videoObj, function(stream) {
video.src = stream;
video.play();
}, errBack);
} else if(navigator.webkitGetUserMedia) { // WebKit-prefixed
navigator.webkitGetUserMedia(videoObj, function(stream){
video.src = window.webkitURL.createObjectURL(stream);
video.play();
}, errBack);
}
else if(navigator.mozGetUserMedia) { // Firefox-prefixed
navigator.mozGetUserMedia(videoObj, function(stream){
video.src = window.URL.createObjectURL(stream);
video.play();
}, errBack);
}
document.getElementById("snap").addEventListener("click", function() {
context.drawImage(video, 0, 0, 640, 480);
});
}, false);
链接地址: http://www.djcxy.com/p/76069.html
上一篇: Capturing images in web application on Windows 8.1 tablets
下一篇: First tap on UITableView ignored after deleteRowsAtIndexPaths