ASP.NET - Capturando imagens de uma WebCam
Neste artigo vou mostrar como capturar imagens de uma WebCam usando o plugin jQuery WebCam em uma aplicação ASP .NET Web Forms. |
Hoje vou criar uma aplicação ASP .NET Web Forms e capturar imagens de uma webcam usando o plugin jQuery WebCam. As imagens serão salvas em uma pasta chamada Capturas na raiz do projeto.
Esse plugin utiliza o Adobe Flash Plugin, e, para que as imagens sejam capturadas você tem que instalar e ativar o plugin para o seu navegador padrão.
Vamos precisar baixar também o Download jQuery Webcam Plugin.
Vamos
usar os recursos do plugin no evento Load da
página. A seguir estão as propriedades de configuração do plugin jQuery Webcam.
1. width - Largura do DIV que exibe a câmera ao
vivo.
2. height - Altura do DIV que exibe a câmera ao
vivo.
3. mode - Existem modos diferentes, como retorno de
chamada, salvar, etc. Eu estou usando o modo de salvar pois vamos salvar a
imagem capturada no servidor.
4. swffile - O caminho do arquivo Flash que será
usado para exibir a webcam na página.
Além das propriedades de configuração acima, os seguintes eventos foram usados.
1. debug - Este evento é um evento de depuração e é
acionado após cada vez que o plugin jQuery Webcam realiza alguma operação. Este
evento pode ser usado para exibir o status do plugin jQuery Webcam.
2. onSave - Esse evento é acionado depois que a
imagem é capturada e carregada no servidor.
3. onCapture - Este evento é acionado quando a
função de captura do plugin jQuery Webcam for executada.
Então ao trabalho...
Recursos usados:
Criando o projeto ASP .NET
Abra o Visual Studio 2017 Community e crie um novo projeto do tipo ASP .NET Web Application (.NET Framework) com o nome CapturaImgemWebCam.
A seguir marque as opções Empty e Web Forms e clique em OK;
Crie no projeto a pasta Capturas onde iremos salvar as imagens
Agora crie uma pasta chamada WebCam_Plugin e coloque nesta pasta o conteúdo baixado do plugin jQuery WebCam.
Após isso inclua uma nova página WebForm com o nome Index.aspx no projeto.
Ao final o seu projeto deverá ter a seguinte estrutura e arquivos:
Nosso projeto ASP .NET Core MVC foi criado e agora vamos ajustá-lo.
Abra o arquivo Index.aspx e inclua o código abaixo:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs"
Inherits="CapturaImagemWebCam.Index" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Capturar Imagem WebCam</title>
</head>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src='<%=ResolveUrl("~/Webcam_Plugin/jquery.webcam.js") %>' type="text/javascript"></script>
<script type="text/javascript">
var pageUrl = '<%=ResolveUrl("~/Index.aspx") %>';
$(function () {
jQuery("#webcam").webcam({
width: 320,
height: 240,
mode: "save",
swffile: '<%=ResolveUrl("~/Webcam_Plugin/jscam.swf") %>',
debug: function (type, status) {
$('#camStatus').append(type + ": " + status + '<br /><br />');
},
onSave: function (data) {
$.ajax({
type: "POST",
url: pageUrl + "/GetImagemCapturada",
data: '',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
$("[id*=imgCaptura]").css("visibility", "visible");
$("[id*=imgCaptura]").attr("src", r.d);
},
failure: function (response) {
alert(response.d);
}
});
},
onCapture: function () {
webcam.save(pageUrl);
}
});
});
function Capturar() {
webcam.capture();
return false;
}
</script>
<form id="form1" runat="server">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<u>Camara ao Vivo</u>
</td>
<td>
</td>
<td align="center">
<u>Capturar Imagem</u>
</td>
</tr>
<tr>
<td>
<div id="webcam">
</div>
</td>
<td>
</td>
<td>
<asp:Image ID="imgCaptura" runat="server" Style="visibility: hidden; width: 320px;
height: 240px" />
</td>
</tr>
</table>
<br />
<asp:Button ID="btnCapturar" Text="Capturar" runat="server" OnClientClick="return Capturar();" />
<br />
<span id="camStatus"></span>
</form>
</body>
</html>
|
No início da página declaramos a utilização do jQuery e do plugin jQuery WebCam que deve estar no local indicado.
A seguir definimos uma função webcam onde usamos o plugin para capturar a imagem.
Agora vamos definir o código do arquivo code-behind Index.aspx.cs :
using System;
using System.IO;
using System.Web;
using System.Web.Services;
namespace CapturaImagemWebCam
{
public partial class Index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
if (Request.InputStream.Length > 0)
{
using (StreamReader reader = new StreamReader(Request.InputStream))
{
string hexString = Server.UrlEncode(reader.ReadToEnd());
string nomeImagem = DateTime.Now.ToString("dd-MM-yy hh-mm-ss");
string caminhoImagem = string.Format("~/Capturas/{0}.png", nomeImagem);
File.WriteAllBytes(Server.MapPath(caminhoImagem), ConvertHexToBytes(hexString));
Session["ImagemCapturada"] = ResolveUrl(caminhoImagem);
}
}
}
}
private static byte[] ConvertHexToBytes(string hex)
{
byte[] bytes = new byte[hex.Length / 2];
for (int i = 0; i < hex.Length; i += 2)
{
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
}
return bytes;
}
[WebMethod(EnableSession = true)]
public static string GetImagemCapturada()
{
string url = HttpContext.Current.Session["ImagemCapturada"].ToString();
HttpContext.Current.Session["ImagemCapturada"] = null;
return url;
}
}
}
|
A
imagem capturada é enviada como dados brutos na forma de
string Hexadecimal pelo jQuery Webcam Flash para o servidor e, portanto,
deve ser capturada no evento Page Load da página
ASP.Net.
Se o Request.InputStream contiver dados, ele será
lido usando um StreamReader e convertido em uma
sequência hexadecimal e, em seguida, a sequência Hexadecimal será convertida em
um array de bytes, que será salvo como um arquivo de imagem.
O caminho da imagem também é salvo como URL em uma variável
Session, pois ela será usada posteriormente quando
a chamada AJAX for feita para o WebMethod
GetImagemCapturada para obter o URL da imagem salva.
Eu utilizei um navegador Chrome e tive que ativar o plugin como mostram as figuras abaixo:
A seguir a imagem da webcam vai aparecer e podemos capturar a imagem clicando no botão Capturar conforme mostra o resultado abaixo. (Minha webcam esta com problemas de resolução):
Quando o
botão da página for clicado, a função JavaScript Capturar()
é executada, e faz uma chamada para o método capture
de plug-in do jQuery Webcam.
Depois que a imagem é capturada, ela é enviada para o servidor usando o método
save do plugin, que é chamado no manipulador de
eventos OnCapture.
Finalmente, o manipulador de eventos OnCapture faz
uma chamada jQuery AJAX para o método GetImagemCapturada
que obtém a URL da imagem capturada do servidor e a URL é então atribuída ao
controle image e exibe a imagem. (A imagem
capturada será salva na pasta Capturas.)
Pegue o projeto aqui: CapturaImagemWebCam.zip (sem as referências)
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
ASP .NET Core 2 - MiniCurso Básico - Macoratti
ASP .NET Core - Macoratti
Conceitos - .NET Framework versus .NET Core - Macoratti
ASP .NET Core - Conceitos Básicos - Macoratti.net
ASP .NET Core MVC - CRUD básico com ADO .NET - Macoratti
ASP .NET Core - Implementando a segurança com ... - Macoratti.net
ASP .NET Core - Apresentando Razor Pages - Macoratti
ASP .NET - Exibindo imagens de um banco de dados - Macoratti
ASP .NET MVC 5 - Cadastro de Produtos (com imagem) - Macoratti.net
ASP .NET MVC 5 - Salvando e Exibindo imagens do banco ... - Macoratti
ASP .NET - Exibindo imagens com GridView - I - Macoratti
ASP .NET Web Forms - Referenciando imagens - Macoratti
ASP .NET - Criando um Álbum de Fotos (C#) - Macoratti
ASP .NET - Zoom em imagens com GridView - Macoratti