[flex-brasil] Como cortar uma imagem Jpeg ?

29 visualizações
Pular para a primeira mensagem não lida

Eduardo Jedliczka

não lida,
19 de ago. de 2009, 07:57:2319/08/2009
para flex-...@yahoogrupos.com.br
 

Flex SDK 3.2, Flash Player 10.0, AMFPHP 1.9, PHP 5, Firebird 2.1 e/ou
Oracle 10g standard.

Eu estou desenvolvendo uma aplicação para o cadastramento e confecção
de crachás (a impressão está sendo via PDF gerado pelo PHP).

Como um crachá precisa de uma foto,  inicialmente fiz a captura
diretamente da WebCam para a tela (código abaixo)

// componente herdado de Panel (responsável por ver a imagem em
movimento da câmera)
var videoHolder:UIComponent = new UIComponent();
var camera:Camera = Camera.getCamera();
camera.setMode(640,480,15,true);
video = new Video(camera.width, camera.height);
video.attachCamera(camera);
videoHolder.addChild(video);
addChild(videoHolder);
videoHolder.y =10;

// código do botão na tela responsável por "bater a foto"
var snapshotHolder:UIComponent = new UIComponent();
var snapshot:BitmapData = new BitmapData(640, 480, true);
snapshot.draw(pnlWebcam.video);

Pronto está lá... tenho um Bitmap que posso cortar, redimensionar,
editar converter para JPEG, e gravar no banco.

Porém (e sempre tem um porém) surgiu a necessidade de capturar as
fotos já batidas numa Máquina Fotográfica.

OK.. fiz uma pesquisa e "copiei" o código abaixo (que só funciona no
Flash Player 10):

public function loadFromDisk():void {
fileRef = new FileReference();
var fileFilter:FileFilter = new FileFilter('Image', '*.jpg');
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener(Event.COMPLETE, completeHandler);
fileRef.browse([fileFilter]);
}

private function selectHandler(event:Event):void {
fileRef.removeEventListener(Event.SELECT, selectHandler);
fileRef.load();
}

private function completeHandler(event:Event):void {
               var img: Image = new Image();
               img.autoLoad = true;
               img.load(fileRef.data);
}

E aqui eu tenho um problema... não consigo atribuir (via clone, draw
ou addChild) o conteúdo carregado para um BitmapData, e também não
consigo saber o tamanho da imagem carregada para "calcular" o
redimensionamento da foto.

Sendo assim, gostaria de algumas sugestões e dicas para contornar esta
limitação, permitindo que eu use a mesma rotina que trata um
BitmapData independente de sua origem.

Sem mais,

Eduardo Jedliczka
Apucarana - Pr

__._,_.___
Flex-Brasil - A maior lista sobre Adobe Flex do Brasil
Regras da lista - http://docs.google.com/View?id=ajjv3tjg5jxf_21cqhpdhf5
Todos os participantes tem os seguintes benefícios:
+ 35% de desconto em livros da O'Reilly ou Peachpit

Site Oficial Flex : http://www.flex.org
Visite nosso site : http://groups.adobe.com/groups/8024da86da/summary
-------------
Conheça a AIR-Brasil a comunidade sobre Adobe AIR
Visite o site:http://groups.google.com/group/air-brasil

Atividade nos últimos dias
Visite seu Grupo
Yahoo! Mail

Conecte-se ao mundo

Proteção anti-spam

Muito mais espaço

Yahoo! Barra

Instale grátis

Buscar sites na web

Checar seus e-mails .

Yahoo! Grupos

Crie seu próprio grupo

A melhor forma de comunicação

.

__,_._,___

Eduardo Kraus

não lida,
19 de ago. de 2009, 08:30:5619/08/2009
para flex-...@yahoogrupos.com.br

[As partes desta mensagem que não continham texto foram removidas]

__._,_.___

__,_._,___

Mário Júnior

não lida,
19 de ago. de 2009, 08:36:4119/08/2009
para flex-...@yahoogrupos.com.br
 

Continue usando a BitmapData para renderizar a foto, com base no bytes
carregados.
E daí, para "cortar" a fot, vc pode usar esses componentes/idéias de como
realizar um "crop"

http://www.flexer.info/2008/10/16/how-to-crop-and-resize-an-image-used-as-background-for-canvas/
http://blog.mediablur.com/2008/02/20/flex-image-cropping-component/

Já fiz uma aplicação "fotográfica" onde eu utilizo esse componente do
segundo link, ele possui alguns "bugs", mas nada dificil de arrumar.

--
Mario Junior
Enterprise Java / Flex Architectures
Adobe Certified Expert Flex 3 with AIR

Sofshore Informática
http://www.sofshore.com.br
+55 (48) 3337 2003
Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100 Itacorubi
Florianopolis SC Brasil



[As partes desta mensagem que não continham texto foram removidas]


__,_._,___

Eduardo Jedliczka

não lida,
19 de ago. de 2009, 08:59:0419/08/2009
para flex-...@yahoogrupos.com.br
 

Mário, obrigado pelas informações... era exatamente o que eu estava
pensando em fazer, porém, ainda continuo com o problema para carregar
o conteúdo do Image num BitmapData...

por hora, obrigado.

Eduardo


__,_._,___

Eduardo Jedliczka

não lida,
19 de ago. de 2009, 09:08:0219/08/2009
para flex-...@yahoogrupos.com.br
 

ao tentar usar o ImageSnapshot, dá um erro de runtime (não consigo
debugar uma aplicação no Flash 10) e sai da rotina!

coloquei um label (nome lbl) e alterei o meu código para :



private function completeHandler(event:Event):void {
var img: Image = new Image();
img.autoLoad = true;
img.load(fileRef.data);

pnlSnapshot.addChild(img);
pnlSnapshot.visible = true;

lbl.text = 'antes';
var iBmpData:BitmapData = ImageSnapshot.captureBitmapData(img);
lbl.text = 'depois';
}

e ao carregar a imagem, vejo o panel, vejo escrito antes do label, e
sai da rotina (mesma coisa se eu trocar img por pnlSnapshot).

mesmo sintoma se eu trocar a linha do CaptureBitmapData por:

var iShot:ImageSnapshot = ImageSnapshot.captureImage(img,0, new
JPEGEncoder(100.0));

Abraço

Eduardo

> ------------------------------------


>
> Flex-Brasil - A maior lista sobre Adobe Flex do Brasil
> Regras da lista - http://docs.google.com/View?id=ajjv3tjg5jxf_21cqhpdhf5
> Todos os participantes tem os seguintes benefícios:
> + 35% de desconto em livros da O'Reilly ou Peachpit
>
> Site Oficial Flex : http://www.flex.org
> Visite nosso site : http://groups.adobe.com/groups/8024da86da/summary
> -------------
> Conheça a AIR-Brasil a comunidade sobre Adobe AIR
> Visite o site:http://groups.google.com/group/air-brasil
>

> Links do Yahoo! Grupos
>
>
>

--
[s]

==========================


Eduardo Jedliczka
Apucarana - Pr


__,_._,___

gabriela.perry

não lida,
19 de ago. de 2009, 11:28:4519/08/2009
para flex-...@yahoogrupos.com.br
 

E isso funciona?
http://flexmonkey.blogspot.com/2008/03/getting-bitmapdata-from-external-image.html

Sobre crop, além disso que o Mario falou, podes usar máscaras. Olha a propriedade mask, dos DisplayObjectContainers (como o Canvas etc etc)

__._,_.___

__,_._,___

Fredy Gonzales

não lida,
19 de ago. de 2009, 11:43:1219/08/2009
para flex-...@yahoogrupos.com.br
 

Eduardo,

Tu das cursos de Flex 3?, tus ejemplos son lo maximo.

Saludos desde Lima - Peru

FG


__,_._,___

Eduardo Jedliczka

não lida,
19 de ago. de 2009, 13:37:5419/08/2009
para flex-...@yahoogrupos.com.br
 

Gabriela,

Muito interessante o link que você postou, mas infelizmente também não
funcionou...

coloquei
img.addEventListener(FlexEvent.UPDATE_COMPLETE, imageLoadedHandler);
tanto após o img.load, quanto antes do img.load

e simplesmente não entra na função imageLoaderHandler!

vou fazer mais alguns testes e qualquer novidade eu posto aqui no grupo.

abraço

Eduardo

2009/8/19 gabriela.perry <gabrielaperry@hotmail.com>:


> E isso funciona?
> http://flexmonkey.blogspot.com/2008/03/getting-bitmapdata-from-external-image.html
>
> Sobre crop, além disso que o Mario falou, podes usar máscaras. Olha a propriedade mask, dos DisplayObjectContainers (como o Canvas etc etc)
>
>
>

> ------------------------------------


>
> Flex-Brasil - A maior lista sobre Adobe Flex do Brasil
> Regras da lista - http://docs.google.com/View?id=ajjv3tjg5jxf_21cqhpdhf5
> Todos os participantes tem os seguintes benefícios:
> + 35% de desconto em livros da O'Reilly ou Peachpit
>
> Site Oficial Flex : http://www.flex.org
> Visite nosso site : http://groups.adobe.com/groups/8024da86da/summary
> -------------
> Conheça a AIR-Brasil a comunidade sobre Adobe AIR
> Visite o site:http://groups.google.com/group/air-brasil
>

> Links do Yahoo! Grupos
>
>
>

--
[s]

==========================

Eduardo Jedliczka
Apucarana - Pr


__,_._,___

gabriela.perry

não lida,
19 de ago. de 2009, 14:29:4519/08/2009
para flex-...@yahoogrupos.com.br
 

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
creationComplete="init();"
width="300" height="400">

<mx:Script>
<![CDATA[
import mx.core.UIComponent;
private var fileRef:FileReference;

private var b:Bitmap;

private function init():void {
fileRef = new FileReference();
fileRef.addEventListener(Event.SELECT, fileRef_select);
fileRef.addEventListener(Event.COMPLETE, fileReference_complete);
}

private function browseAndUpload():void {
fileRef.browse();
}

private function fileReference_complete(evt:Event):void {
im.source = fileRef.data;
}

private function fileRef_select(evt:Event):void {
fileRef.load();
im.source=fileRef.data
//im.load(fileRef.data)
im.addEventListener(Event.COMPLETE, show_image)
}

private function show_image(evt:Event):void{
var bitmapData:BitmapData=new BitmapData(Image(evt.currentTarget).content.width,
Image(evt.currentTarget).content.height)
bitmapData.draw(im,new Matrix());
b=new Bitmap(bitmapData,"auto", false)

var c:UIComponent=new UIComponent;
c.addChild(b);
addChild(c);
}
]]>
</mx:Script>

<mx:Button label="Upload file" click="browseAndUpload();" />
<mx:Image id="im"/>

</mx:Application>

__._,_.___
Flex-Brasil - A maior lista sobre Adobe Flex do Brasil
Regras da lista - http://docs.google.com/View?id=ajjv3tjg5jxf_21cqhpdhf5
Todos os participantes tem os seguintes benefícios:
+ 35% de desconto em livros da O'Reilly ou Peachpit

Site Oficial Flex : http://www.flex.org
Visite nosso site : http://groups.adobe.com/groups/8024da86da/summary
-------------
Conheça a AIR-Brasil a comunidade sobre Adobe AIR
Visite o site:http://groups.google.com/group/air-brasil

Atividade nos últimos dias
Visite seu Grupo
Yahoo! Mail

Conecte-se ao mundo

Proteção anti-spam

Muito mais espaço

Yahoo! Barra

Instale grátis

Buscar sites na web

Checar seus e-mails .

Yahoo! Grupos

Crie seu próprio grupo

A melhor forma de comunicação

.

__,_._,___

Eduardo Jedliczka

não lida,
19 de ago. de 2009, 15:19:1819/08/2009
para flex-...@yahoogrupos.com.br
 

Gabriela,

obrigado pelo exemplo... ele funcionou perfeitamente...

dentro da função show_image(...) eu coloquei a seguinte linha:
Alert('width: ' +Image(evt.currentTarget).content.width + ' /
heigth: ' +Image(evt.currentTarget).content.height);

mas nada foi exibido na tela.... resolvi então trocar o Alert pelo
label e funcionou perfeitamente.

sendo assim, constatei apenas duas diferenças no código que eu estava
usando aqui com o seu.

a 1ª se deve ao fato de eu estar usando im.load ao invés de im.source.
a 2ª é que eu só tinha um listener no Event.COMPLETE (no fileRef) e
tinha tentado (sem sucesso) até usar um callLater para contornar o
problema. Acredito que era este o problema... eu estava tentando
copiar a imagem antes dela ser carregada no image. (se fosse no Delphi
eu usaria um Application.ProcessMessages...)

Sendo assim, obrigado à todos pela atenção, pelas respostas
pertinentes e rápidas.

Mais uma vez, obrigado.

2009/8/19 gabriela.perry <gabrielaperry@hotmail.com>:

> ------------------------------------


>
> Flex-Brasil - A maior lista sobre Adobe Flex do Brasil
> Regras da lista - http://docs.google.com/View?id=ajjv3tjg5jxf_21cqhpdhf5
> Todos os participantes tem os seguintes benefícios:
> + 35% de desconto em livros da O'Reilly ou Peachpit
>
> Site Oficial Flex : http://www.flex.org
> Visite nosso site : http://groups.adobe.com/groups/8024da86da/summary
> -------------
> Conheça a AIR-Brasil a comunidade sobre Adobe AIR
> Visite o site:http://groups.google.com/group/air-brasil
>


__,_._,___

Castor Jr

não lida,
19 de ago. de 2009, 15:26:3919/08/2009
para flex-...@yahoogrupos.com.br
 

Eu não entendo muito mas para FileReference() existe a propriedade data e load ?

________________________________
De: gabriela.perry <gabrielaperry@hotmail.com>
Para: flex-brasil@yahoogrupos.com.br
Enviadas: Quarta-feira, 19 de Agosto de 2009 15:29:45
Assunto: [flex-brasil] Re: Como cortar uma imagem Jpeg ?

<?xml version="1.0" encoding="utf- 8"?>


<mx:Application
xmlns:mx="http://www.adobe. com/2006/ mxml"
layout="vertical"
creationComplete= "init();"
width="300" height="400" >

<mx:Script>
<![CDATA[
import mx.core.UIComponent ;
private var fileRef:FileReferen ce;

private var b:Bitmap;

private function init():void {
fileRef = new FileReference( );
fileRef.addEventLis tener(Event. SELECT, fileRef_select) ;
fileRef.addEventLis tener(Event. COMPLETE, fileReference_ complete) ;
}

private function browseAndUpload( ):void {
fileRef.browse( );
}

private function fileReference_ complete( evt:Event) :void {


im.source = fileRef.data;
}

private function fileRef_select( evt:Event) :void {
fileRef.load( );
im.source=fileRef. data
//im.load(fileRef. data)

im.addEventListener (Event.COMPLETE, show_image)

}

private function show_image(evt: Event):void{
var bitmapData:BitmapDa ta=new BitmapData(Image( evt.currentTarge t).content. width,
Image(evt.currentTa rget).content. height)

bitmapData.draw( im,new Matrix());


b=new Bitmap(bitmapData, "auto", false)

var c:UIComponent= new UIComponent;
c.addChild(b) ;
addChild(c);
}
]]>
</mx:Script>

<mx:Button label="Upload file" click="browseAndUpl oad();" />


<mx:Image id="im"/>

</mx:Application>

__________________________________________________________
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com



[As partes desta mensagem que não continham texto foram removidas]


__,_._,___

gabriela.perry

não lida,
19 de ago. de 2009, 15:31:4219/08/2009
para flex-...@yahoogrupos.com.br

__,_._,___

gabriela.perry

não lida,
19 de ago. de 2009, 15:35:0619/08/2009
para flex-...@yahoogrupos.com.br
 

Só pra fechar o tópico (mais um pouco de paciencia do pessoal, que esse post ta com 13 replies!!!!):

- 1ª se deve ao fato de eu estar usando im.load ao invés de im.source.
Não faz diferença....

- 2ª é que eu só tinha um listener no Event.COMPLETE (no fileRef) e


tinha tentado (sem sucesso) até usar um callLater para contornar o
problema. Acredito que era este o problema... eu estava tentando
copiar a imagem antes dela ser carregada no image. (se fosse no Delphi
eu usaria um Application.ProcessMessages...)


__,_._,___

Eduardo Kraus

não lida,
19 de ago. de 2009, 17:30:2819/08/2009
para flex-...@yahoogrupos.com.br
 

Sim, ministro treinamento em programação Adobe Flex, atualmente só
presencia.

2009/8/19 Fredy Gonzales <fredyg1965@gmail.com>

>
>
> Eduardo,
>
> Tu das cursos de Flex 3?, tus ejemplos son lo maximo.
>
> Saludos desde Lima - Peru
>
> FG
>
>
> ----- Original Message -----
> From: Eduardo Kraus
> To: flex-brasil@yahoogrupos.com.br <flex-brasil%40yahoogrupos.com.br>
> Sent: Wednesday, August 19, 2009 7:30 AM
> Subject: Re: [flex-brasil] Como cortar uma imagem Jpeg ?
>
> usa o ImageSnapshot
>
> Tem um exemplo aqui.
>
> http://blog.mxml.com.br/adobe-flex-com-relatorio-em-pdf
>
> *Eduardo Kraus*
> Desenvolvedor

> eduardokraus@gmail.com <eduardokraus%40gmail.com>
> http://blog.mxml.com.br
> http://twitter.com/EduardoKraus
>
> 2009/8/19 Eduardo Jedliczka <edujed@gmail.com <edujed%40gmail.com>>

Flex-Brasil - A maior lista sobre Adobe Flex do Brasil
Regras da lista - http://docs.google.com/View?id=ajjv3tjg5jxf_21cqhpdhf5
Todos os participantes tem os seguintes benefícios:
+ 35% de desconto em livros da O'Reilly ou Peachpit

Site Oficial Flex : http://www.flex.org
Visite nosso site : http://groups.adobe.com/groups/8024da86da/summary
-------------
Conheça a AIR-Brasil a comunidade sobre Adobe AIR
Visite o site:http://groups.google.com/group/air-brasil

Atividade nos últimos dias
Visite seu Grupo
Yahoo! Mail

Conecte-se ao mundo

Proteção anti-spam

Muito mais espaço

Yahoo! Barra

Instale grátis

Buscar sites na web

Checar seus e-mails .

Yahoo! Grupos

Crie seu próprio grupo

A melhor forma de comunicação

.

__,_._,___
Responder a todos
Responder ao autor
Encaminhar
0 nova mensagem