Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Aprendiz CSS

Facebook Tirar Foto

Recommended Posts

Olá Galera

 

Alguém saberia me dizer como é feito o processo para tirar foto pela webcam como o facebook faz.

 

Eu vi um post aqui, mas ficou muito generico.

Tenho que ter algo instalado no servidor, ou dá pra fazer de outra forma?

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Paulo,

 

Se você vai utilizar Flash para isso, é bastante simples, mas é feito em duas etapas:

 

1. Controle da câmera - É importante notar que não necessariamente o usuário terá uma câmera e, ainda, que mesmo que ele tenha uma câmera, ele poderá não permitir que você a utilize.

 

package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import flash.media.Video;
import flash.media.Camera;

public class Paulo extends Sprite {
	private var video :Video;
	private var photo :Bitmap;

	public function Paulo() {
		super();

		stage.scaleMode = StageScaleMode.NO_SCALE;
		stage.align = StageAlign.TOP_LEFT;

		if ( Camera.names.length >= 1 ) {
			var camera :Camera = Camera.getCamera();

			if ( camera != null ) {
				video = new Video( 320 , 240 );
				camera.setMode( 320 , 240 , 15 );

				video.attachCamera( camera );
				stage.addEventListener( MouseEvent.CLICK , take );

				addChild( video );
			} else {
				//o usuário não permitiu utilizar a câmera
			}
		} else {
			//o usuário não tem uma câmera
		}
	}

	/**
 	* Tira a foto
 	*/
	private function take( e :MouseEvent ) :void {
		var bitmapData :BitmapData = new BitmapData( video.width , video.height );
		var bitmap :Bitmap = new Bitmap( bitmapData );

		bitmapData.draw( video );

		bitmap.x = video.x + video.width + 4;

		addChild( bitmap );
	}
}
}

 

Com isso ai você terá a captura da câmera sendo exibida em um objeto Video no seu stage, quando clicar em qualquer lugar do stage a imagem será capturada e exibida em um Bitmap ao lado do Video.

 

Feito isso, você precisa pegar o BitmapData, codificar e enviar o ByteArray para o servidor.

 

Vai usar Java no servidor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande João, como sempre ajudando e muito bem ajudado por sinal.

Consegui fazer exibir a webcam e tirar a foto. Perdi um tempão brincando com as fotos que eu tirava... kkkkk

Vamos a código gerado e com novas implementações

 

package
{
import com.adobe.images.JPGEncoder;
import com.dynamicflash.util.Base64;

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import flash.media.Camera;
import flash.media.Video;
import flash.net.FileReference;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.net.navigateToURL;
import flash.text.TextField;
import flash.utils.ByteArray;


public class webcam extends Sprite
{
	private var video :Video;
	private var photo :Bitmap;
	private var tempo_video :int;
	private var id_aula :int;

	public function webcam()
	{
		super();

		stage.scaleMode = StageScaleMode.NO_SCALE;
		stage.align = StageAlign.TOP_LEFT;

		if ( Camera.names.length >= 1 ) {
			var camera :Camera = Camera.getCamera();

			if ( camera != null ) {
				video = new Video( 320 , 240 );
				camera.setMode( 320 , 240 , 15 );

				video.attachCamera( camera );
				stage.addEventListener( MouseEvent.CLICK , take );

				addChild( video );

			} else {
				//o usuário não permitiu utilizar a câmera
			}
		} else {
			//o usuário não tem uma câmera
		}
	}

	/**
	* Tira a foto
	*/
	private function take( e :MouseEvent ) :void {
		var bitmapData :BitmapData = new BitmapData( video.width , video.height );
		var bitmap :Bitmap = new Bitmap( bitmapData );

		bitmapData.draw( video );
		bitmap.x = video.x + video.width + 4;
		addChild( bitmap );

		var jpgEncoder :JPGEncoder = new JPGEncoder(80);
		var byteArray :ByteArray = jpgEncoder.encode(bitmapData);

		var byteArrayAsString:String = Base64.encodeByteArray(byteArray);

		// construct server-side URL to use to send image data
		var url:String = "http://localhost/webcam/upload.php" + '?' + Math.random();

		// determine name of file to be saved / displayed
		var fileName:String = "imagem_" + '.' + "jpg";

		// create URL request
		var request:URLRequest = new URLRequest(url);

		// send data via POST method
		request.method = URLRequestMethod.POST;

		// set data to send
		var variables:URLVariables = new URLVariables();
		variables.format = "jpg";
		variables.action = "";
		variables.fileName = fileName;
		variables.image = byteArrayAsString;
		request.data = variables;

		navigateToURL(request, "_blank");

		}
	}
}

 

upload.php

<?php
  $fp = fopen('imagem_'.time().'.jpg', 'w');
  fwrite($fp, base64_decode($_POST["image"]));
  fclose($fp);   
?>
<script>window.close();</script>

 

Consegui tirar a foto e enviá-la para o servidor.

Uma coisa que não gostei, foi isso

			navigateToURL(request, "_blank"); 

 

_blank, será que existe uma forma de não jogar a abertura de uma nova página para o cliente.

Outra coisa que gostaria de saber é como faço para passar parametro para dentro do SWF?

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.