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

Objetivo:
Al finalizar el tutorial, seras capaz de iniciar la camara web de un usuario, tomar un foto, y enviar la foto a un servidor para que sea procesada con PHP

Requisitos:
  • Adobe Flash CS3
  • Un servidor LAMP local o remoto.
  • Codificador JPG as3corelib.

Preparando el ambiente de trabajo:

Crear un archivo Flash ActionScript 3.0 Nuevo

Guarda el archivo creado con cualquier nombre. Yo lo llamare camara.fla.
Crear un archivo ActionScript:

Guardar el archivo ActionScript con la misma ubicación que el archivo anterior. Yo lo llamare camara.as

Regresar al archivo camara.fla, y en el panel de propiedades, en el campo Clase del documento, escribir el nombre (sin la extension) del archivo .as que acabamos de crear. Si estás siguiendo el Tutorial, deberás escribir camara.


Instalando as3corelib JPEG Encoder
Hacer click en el boton Downloads y en el dialogo que aparece, seleccionar la version mas reciente de la libreria. Al 22 de Diciembre del 2010, la version mas reciente es: as3corelib-.93

Descomprimir la libreria en la carpeta de nuestra preferencia.
Tenemos que incluir la libreria en Flash, para que al momento de utilizar el decoder, el compilador de Flash sepa donde encontrar los metodos y parametros que vamos a utilizar, para incluir la libreria sigue los siguientes pasos:
  • Presiona Ctrl + U o Edicion > Preferencias
  • En el panel izquierdo, selecciona ActionScript
  • Presiona el boton Configuracion para ActionScript 3.0
  • Presiona el boton Buscar Ruta
  • Selecciona la ruta a tu archivo, hasta la carpeta src.
    Ejemplo: %RUTA A TU ARCHIVO%\as3corelib-.93\src
    En mi caso: C:\Librerias Flash\as3corelib-.93\src


Crear un boton para disparar la camara
Necesitaremos un boton para tomar la foto. Este boton sera un clip de pelicula, el cual vamos a exportar para ActionScript con el nombre de clase "boton".

La imagen a utilizar es:

Para Crear el Clip de Pelicula
  • Presionar Ctrl+F8
  • Nombrar el MovieClip
  • Hacer click en el botón "Avanzado"
  • Activar la casilla Exportar para ActionScript
  • Cambiar el campo de texto "Clase" por "boton" (sin comillas).


ADVERTENCIA: Al hacer click en Aceptar, Flash arrojara un cuadro de dialogo advirtiendo que no se ha encontrado una clase para el elemento. Hagan click en Aceptar en el cuadro de dialogo e ignorenlo, es normal que suceda esto.

Guarda los cambios en el archivo .fla. Si todo se encuentra en su lugar, al hacer click en el icono al lado de la clase del documento flash deberá cambiarse automaticamente al entorno de programación.

El codigo
Ya estamos listos para empezar a programar. Copia y pega el siguiente codigo en el entorno de programacion. Si seguiste el tutorial al pie de la letra no debes tener ningun problema al compilarlo.


Código actionscript:
Ver original
  1. package{
  2.     import flash.media.*;
  3.     import flash.display.*;
  4.     import flash.utils.*;
  5.     import flash.net.*;
  6.     import flash.events.*;
  7.     import com.adobe.images.JPGEncoder;
  8.    
  9.     public class camara extends flash.display.MovieClip
  10.     {
  11.         var ancho:Number = 320;
  12.         var alto:Number = 240;
  13.         var cam:Camera = Camera.getCamera();
  14.         var miWebcam:Video = new Video(ancho,alto);
  15.         var arrayDeBytes:ByteArray = new ByteArray();
  16.         var mapaDeBits:BitmapData = new BitmapData(ancho,alto);
  17.         public var tomarFoto:MovieClip;
  18.  
  19.         public function camara():void
  20.         {
  21.             tomarFoto = new boton();
  22.             tomarFoto.x = ancho/2;
  23.             tomarFoto.y = alto;
  24.             tomarFoto.addEventListener(MouseEvent.CLICK, capturarImagen);
  25.            
  26.             miWebcam.x = 0;
  27.             miWebcam.y = 0;
  28.             miWebcam.attachCamera(cam);
  29.            
  30.             addChild(miWebcam);
  31.             addChild(tomarFoto);
  32.         }
  33.        
  34.         public function capturarImagen(e:Event)
  35.         {
  36.             mapaDeBits.draw(miWebcam);
  37.             var codificador:JPGEncoder = new JPGEncoder(85);
  38.             arrayDeBytes = codificador.encode(mapaDeBits);
  39.             var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
  40.             var req:URLRequest = new URLRequest("crearfoto.php?nombre=foto.jpg");
  41.             req.requestHeaders.push(header);
  42.             req.method = URLRequestMethod.POST;
  43.             req.data = arrayDeBytes;
  44.             navigateToURL(req,"_blank");
  45.         }
  46.        
  47.     }
  48. }

Ahora crea un archivo php llamado crearfoto.php y copia el siguiente codigo:


Código php:
Ver original
  1. <?php
  2. if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
  3. {
  4.     // get bytearray
  5.     $jpg = $GLOBALS["HTTP_RAW_POST_DATA"];
  6.  
  7.     // add headers for download dialog-box
  8.     header('Content-Type: image/jpeg');
  9.     $nombreArchivo = $_GET['nombre'];
  10.     $manejadorArchivo = fopen($nombreArchivo, 'w') or die("No se pudo escribir archivo");
  11.     fwrite($manejadorArchivo,$jpg);
  12.     fclose($manejadorArchivo);
  13. }
  14. ?>

ADVERTENCIA. Tienes que tener Apache y PHP instalados para que funcione. Coloca los archivos en las carpetas publicas del servidor para que sean ejecutados correctamente.

Mirame en ejecucion!!

El programa en ejecucion debe producirte la siguiente salida:


Accesa a la siguiente direccion para que puedas ver el script en ejecucion.

Tomar fotos desde Flash

Esta es la ultima foto tomada desde el programa: