Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/12/2010, 03:13
AlanChavez
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 14 años, 6 meses
Puntos: 95
Respuesta: [Tutorial] Como tomar fotos con una camara web desde Flash y procesarla co

El codigo explicado
Las variables:
  • ancho - El ancho del cuadro donde se mostrara la camara web del usuario.
  • alto - El alto del cuadro donde se mostrara la camara web del usuario
  • cam - Variable tipo Camera. Esta es la camara del usuario de la cual se obtendran las imagenes.
  • miWebcam - Es una variable tipo Video, es la que se encarga de canalizar el canal de video, de nuestra camara instanciada en la variable cam. Recibe dos argumentos, ancho y alto, si estos argumentos no son fijados, toman los valores de fabrica 320 y 240 respectivamente.
  • arrayDeBytes - Es un array, en donde se almacenara la informacion binaria de la foto capturada.
  • mapaDeBits - Es una Matriz de bits, contiene la informacion de color y canales de nuestra imagen. Tenemos que transformar esta matriz de bits en un array de bytes para que pueda ser enviada al servidor y escrita a un archivo.
  • tomarFoto - Es el MovieClip que contiene la imagen que funcionara como boton para mandar la senal de tomar la foto.

Las funciones
  • camara()
    Es el constructor de la clase. En esta funcion vamos a instanciar nuestra imagen, fijamos las coordenadas X,Y de la imagen y le agregamos un inspector de eventos. Basicamente el inspector de eventos transforma nuestro Clip de Pelicula en un Boton, ya que se encuentra monitoreando cuando el usuario hace click sobre el Clip de Pelicula. En el momento en el que el usuario hace click en el Clip de Pelicula, se ejecuta la funcion capturarImagen().

    Se fijan las coordenadas X,Y de nuestra camara y vinculamos la camara web del usuario, con la transmision de video en Flash. Finalmente agregamos al usuario el boton y la transmision de video.

  • capturarImagen()
    Aqui es donde la magia sucede. Vamos a utilizar el metodo draw() del objeto mapaDeBits para copiar la informacion de la imagen del objeto miWebcam a la variable mapaDeBits.

    Posteriormente, instanciamos la clase JPGEncoder con el nombre codificador y le pasamos el parametro 85. El parametro puede variar entre 0 y 100, y represente la compresion de la imagen JPG. Entre menor sea el numero, mayor la calidad y mayor el peso.

    Con ayuda del metodo encode de la clase JPGEncoder, vamos a codificar el mapa de bits de la imagen, a un arreglo binario y almacenarlo en la variable arrayDeBytes.

    En las siguientes lineas, se establece el encabezado que contiene el tipo de contenido que vamos a transmitir al servidor, asi como la direccion que se encargara de manipular nuestro archivo. (crearfoto.php)

    La foto en el servidor sera creada con el nombre de "foto.jpg" a traves de la variable global "nombre"

    En la siguiente linea establecemos el metodo de envio de datos, que sera el metodo POST. Utilizamos este metodo por la cantidad de informacion que puede transmitirse a traves de el.

    Finalmente, establecemos que informacion sera enviada y procedemos a enviar la informacion con la funcion navigateToURL.
crearfoto.php
El codigo en este archivo del lado del servidor, se encarga de procesar el arreglo de bytes recibido desde flash, y transformar este array de bytes, en un archivo de imagen JPG.

Primero verificamos que en efecto, estamos recibiendo datos a traves de la URL. Si estamos recibiendo los datos, vamos a crear un archivo cuyo nombre lo recibimos desde la variable "nombre" en la URL. Verificamos que tenemos los permisos para escribir el archivo y procedemos a escribir el archivo almacenado en la variable $jpg.


Los archivos
Finalmente, aqui estan los archivos para que analices el codigo.
Tomar fotos desde Flash y PHP

Notas finales
Una vez con el archivo generado y guardado en el servidor, se pueden hacer muchas cosas con el. Podemos almacenar la ruta en una base de datos o utilizar la imagen como archivo adjunto de un correo electronico.

Este metodo no solamente sirve para camaras web, en realidad cualquier clip de pelicula puede ser enviado a traves del metodo POST para que sea transformado en un archivo JPG. Que la imaginacion sea tu limite!!


En mi pagina personal estoy agregando los mismos tutoriales y pronto empezare a agregar contenido exclusivo!
http://www.alanchavez.com