¿Tienes una cuenta? identificate: Usuario Contraseña o puedes obtener una gratis.

ToRo Blog

¡Al pesebre... fieras!

30
julio
2009

Capturar imagen de webcam con flash

… y almacenarla en un servidor.

El proceso es muy sencillo, básicamente utilicé código de varios sitios donde dan tips y algunas cosas de la documentación, esto es funcional para flash 8 profesional (o al menos es lo que yo utilicé) y ActionScript 2.0.

1. Lo primero es crear una película (Menú Archivo / Nuevo / Documento de flash).

2. En la parte derecha dar click en el menú de biblioteca y crear nuevo video, dejar marcado que sea controlado por ActionScript

3. Arrastrar y crear una instancia nueva en la Capa 1, llamar a esa instancia webcam, posicionarse en el fotograma 1 y copiar y pegar el siguiente código en la ventana de acciones (pulsando F9 sale)

theCam = Camera.get(); //obtenemos la cámara
theCam.setQuality(8192,95); //calidad de la imágen
theCam.setMode(160,120,5);
webcam.attachVideo(theCam);
import flash.display.BitmapData;
//creamos pelicula nueva para almacenar la imagen capturada
bitmapData = new BitmapData(160, 120, true, 0);
this.createEmptyMovieClip("bmp1", this.getNextHighestDepth());
bmp1.attachBitmap(bitmapData, 2, "auto", true);
bmp1._x = 170;snap._y = 0;
enviar.enabled = false;
enviar._alpha = 10;
preloader.text = "";
//creamos dos botones (pueden ser predefinidos), uno para capturar y otro para almacenar
snapshot_btn.onPress = function () {
	bitmapData.draw(webcam);
	//output();
	enviar._alpha = 100;
	enviar.enabled = true;
}
enviar.onPress = function  () {
	preloader.text = "Enviando...";
	enviar.enabled = false;
	output();
}
//función que obtiene la imagen y la envía al servidor (en este caso al archivo almacena.php)
function output() {
	snap = new BitmapData(bmp1._width,bmp1._height,true,0);
	snap.draw(bmp1);
	var pixels:Array = new Array();
	var w:Number = snap.width;
	var h:Number = snap.height;
	for (var a=0; a<=w; a++) {
		for (var b=0; b<=h; b++) {
			var tmp = snap.getPixel(a,b).toString(16);
			pixels.push(tmp);
		}
	}
	var output:LoadVars = new LoadVars();
	output.img = pixels.toString();
	output.height = h;
	output.width = w;
	snap.dispose();
	output.send("almacena.php","","POST");
}

4. Exportamos la película y la subimos al servidor, la imagen capturada se enviará a almacena.php por el método POST.

5. Recibimos el contenido del swf en el archivo almacena.php que básicamente puede contener:

<?php
   if(isset($_POST['img']) && !empty($_POST['img'])) {
      $file = uniqid().".jpeg";
      $data = explode(",", $_POST['img']);
      $width = $_POST['width']; $height = $_POST['height'];
      $image=imagecreatetruecolor($width, $height) or die('no hay GD!');
      $background = imagecolorallocate($image, 0, 0, 0);
      $i = 0;
      for($x=0; $x<=$width; $x++){
         for($y=0; $y<=$height; $y++){
            $int = hexdec($data[$i++]);
            $color = ImageColorAllocate($image, 0xFF & ($int >> 0x10), 0xFF & ($int >> 0x8), 0xFF & $int);
            imagesetpixel($image, $x, $y, $color);
         }
      }
      /* almacenamos la imagen, si prefiriésemos mostrarla
         usaríamos el siguiente código:
         Header('Content-type: image/jpeg');
         ImageJPEG($image);
         ImageDestroy($image);
      */
      ImageJPEG($image,$file,95);//genera un jpg con resolución del 95%
      imagedestroy($image);
   } else die("error");
?>

Como se ve, es muy sencillo hacerlo, nomás que no he podido almacenar una imagen mas de 160x120 pixeles… no se si sea una limitante de la versión de Flash porque debo confesar que no soy experto en, ni me gusta Macromedia Adobe Flash. El ejemplo del funcionamiento está en MexicoDiario y en Ymipollo funcionando.

Actualización: hice algunos cambios y ya pude capturar la imagen mas grande… publiqué el .fla. ojalá le sirva a alguno ;-).

Almacenado en Php, Programacion, Flash, Actionscript [ Enlace | Tres comentarios ] del.icio.us del.icio.us Estrella este post *****
comparte esto
Comparte esta entrada (del.icio.us, por correo, etc) o agrega este blog a tu Google Reader.

Entradas relacionadas:
  1. Capturar imagen de webcam con flash II
  2. posts con webcam en ymipollo X
  3. webcam en ymipollo III
  4. posts con webcam en ymipollo
  5. Ymipollo con webcam 2

Han escrito 3 comentarios de «Capturar imagen de webcam con flash»

foto pollo666
Jueves 30 de julio, 2009 18:18.

dejame hecharle le culpa a la resolucion por ke no funciona mi cam xD

(anonimo)victor
Martes 25 de agosto, 2009 10:24. [usuario no registrado en ymipollo.com]

No tienes idea de como pasar esto a un a asp?

foto ToRo
Martes 25 de agosto, 2009 10:24.
@(anonimo)victor no tengo idea… no se nada de ASP ;(
Si usted tiene una cuenta en ymipollo.com, identifíquese:
Usuario: Password: (recordar identificación en este blog)
De lo contrario, escriba sus datos (todos los campos son obligatorios.):
Nombre: Correo E.:
Blog/Web: recordar datos.
[ si eres visitante puedes obtener tus comentarios con foto suscribiendote a gravatar. Tenga en cuenta que como usuario anónimo, su dirección IP será almacenada y mostrada al dueño de la entrada en cada comentario. ]
Escriba su comentario:
Por favor escriba respecto al post, procure revisar su ortografía. Si su comentario no es respecto al tema, por favor no lo haga.

Usted escribirá este mensaje como:
Es posible que su comentario no aparezca de forma inmediata (o que nunca aparezca) eso depende de la decisión del autor de este blog.

enviarme correo cuando alguien comente suscribirse a este post.