Foros del Web » Creando para Internet » Flash y Actionscript »

[Tutorial] Como tomar fotos con una camara web desde Flash y procesarla con PHP

Estas en el tema de [Tutorial] Como tomar fotos con una camara web desde Flash y procesarla con PHP en el foro de Flash y Actionscript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 22/12/2010, 03:12
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 9 años, 5 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:
  #2 (permalink)  
Antiguo 22/12/2010, 03:13
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 9 años, 5 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
  #3 (permalink)  
Antiguo 07/02/2011, 16:34
 
Fecha de Ingreso: febrero-2011
Mensajes: 2
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: [Tutorial] Como tomar fotos con una camara web desde Flash y procesarla co

Hola que tal, muy bueno y facil el tutorial, pero sigo los pasos y no me funciona me envia estos errores por preferencias agrego la librería as3corelib. sera por que uso cs4??? Gracias. Saludos.
  #4 (permalink)  
Antiguo 07/02/2011, 21:06
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 9 años, 5 meses
Puntos: 95
Respuesta: [Tutorial] Como tomar fotos con una camara web desde Flash y procesarla co

La version de Flash, mientras soporte AS3, no tiene nada que ver, por lo que Adobe Flash CS4 puedes descartarlo.

El problema es que no encuentra la libreria as3corelib que llama al metodo JPGEncoder.

Para CS4 debes ir al menu:
Editar->Preferencias (o presionar Ctrl+U)
En el panel izquierdo, selecciona ActionScript, y en el panel derecho al final encontraras una seccion que dice
Lenguaje, haz click en el boton Propiedades para ActionScript 3.0 , y donde dice
Ruta del codigo fuente: (Source path)
haz click en el boton de la carpetita, y buscas la ruta a la libreria
presionas OK, y todo debe estar listo y funcionando.


Ahora una nota especial:

Si te fijas en el ActionScript puse:

import com.adobe.images.JPGEncoder;

Esta linea, te indica la jerarquia de las carpetas, es decir tiene la siguiente estructura:

com->adobe->images->JPGEncoder.as


Cuando descomprimes el archivo as3corelib digamos en la ruta

C:\Usuarios\Administrador\Librerias Flash\

Debes agregar la ruta hasta:
C:\Usuarios\Administrador\Librerias Flash\as3corelib\

Me explico?
  #5 (permalink)  
Antiguo 08/02/2011, 08:17
 
Fecha de Ingreso: febrero-2011
Mensajes: 2
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: [Tutorial] Como tomar fotos con una camara web desde Flash y procesarla co

Gracias por tu respuestas, ya vi mi error en la ventana de preferencias no estaba colocando la ruta en el lugar correcto. Saludos, Gracias excelente tutorial.



Cita:
Iniciado por AlanChavez Ver Mensaje
La version de Flash, mientras soporte AS3, no tiene nada que ver, por lo que Adobe Flash CS4 puedes descartarlo.

El problema es que no encuentra la libreria as3corelib que llama al metodo JPGEncoder.

Para CS4 debes ir al menu:
Editar->Preferencias (o presionar Ctrl+U)
En el panel izquierdo, selecciona ActionScript, y en el panel derecho al final encontraras una seccion que dice
Lenguaje, haz click en el boton Propiedades para ActionScript 3.0 , y donde dice
Ruta del codigo fuente: (Source path)
haz click en el boton de la carpetita, y buscas la ruta a la libreria
presionas OK, y todo debe estar listo y funcionando.


Ahora una nota especial:

Si te fijas en el ActionScript puse:

import com.adobe.images.JPGEncoder;

Esta linea, te indica la jerarquia de las carpetas, es decir tiene la siguiente estructura:

com->adobe->images->JPGEncoder.as


Cuando descomprimes el archivo as3corelib digamos en la ruta

C:\Usuarios\Administrador\Librerias Flash\

Debes agregar la ruta hasta:
C:\Usuarios\Administrador\Librerias Flash\as3corelib\

Me explico?
  #6 (permalink)  
Antiguo 23/02/2011, 21:19
 
Fecha de Ingreso: mayo-2009
Mensajes: 53
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: [Tutorial] Como tomar fotos con una camara web desde Flash y procesarla co

gracias por tomarte el tiempo para compartir tus conocimientos, ojala pueda poner esto en practica ya que actualmente me solicitaron la creación de una credencial y pues no querian subir imagenes ya tomadas anteriormente si no que queria que se tomaran desde la webcam y se pusiera la foto en generada....

bueno gracias y un saludo.
  #7 (permalink)  
Antiguo 24/02/2011, 08:09
Avatar de Jime25  
Fecha de Ingreso: septiembre-2009
Ubicación: Mi casa
Mensajes: 1.213
Antigüedad: 10 años, 2 meses
Puntos: 138
Respuesta: [Tutorial] Como tomar fotos con una camara web desde Flash y procesarla co

Muy, pero muy buen aporte!!
__________________
Jime~

Mi blog.
Mi twitter.
  #8 (permalink)  
Antiguo 21/06/2011, 11:36
Avatar de ceaped  
Fecha de Ingreso: febrero-2004
Mensajes: 2.147
Antigüedad: 15 años, 9 meses
Puntos: 9
Respuesta: [Tutorial] Como tomar fotos con una camara web desde Flash y procesarla co

Hola AlanChavez
Muy buen tutorial
Tengo para hacerte 2 preguntas:

1. Lo pruebo y me sale este error:

Cita:
Parse error: parse error in C:\wamp\www\foto_con_camara_WEB\crearfoto.php on line 4
2. Cuando lo pruebo el área de la cámara se ve mal, como cuando un TV está malo.

3. Llevo buscando rato por la Web y deseo hacer lo mismo pero grabando video y que se pueda descargar. Es esto posible?.

Gracias por tu ayuda
__________________
Diseñador Gráfico publicitario
  #9 (permalink)  
Antiguo 27/09/2011, 20:40
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 10 años, 9 meses
Puntos: 89
Respuesta: [Tutorial] Como tomar fotos con una camara web desde Flash y procesarla co

Esto tiene que estar en Aportes de PHP
Increible! sos dios!
__________________
Mono programando!
twitter.com/eguimariano

Etiquetas: flash, fotos, php, tomar, tutoriales, camaras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 12:02.