O que nos permite salvar as imagens em ambos formatos são estas classes: JPGEncoder e PNGEncoder, ambas do pacote as3corelib. Se deseja trabalhar com elas, baixe o pacote e instale-o no classPath do Flash.
Neste post mostrarei 2 exemplos: o primeiro salva a imagem com formato JPG e o segundo salva a imagem com formato PNG. Ambos exemplos possuem um funcionamento simples, pois o que interessa neste post é dar ênfase ao código usado para salvar a imagem no computador a partir do Flash. Tendo eles como base você poderá criar algo mais complexo, como o aplicativo PhotoProfile (criado por mim).
EXEMPLO 1
Existem alguns sites baseados em comics que oferecem a possibilidade de você criar seu próprio super-herói e depois salvar a imagem no computador. Este exemplo cria um ambiente similar no qual você pode modificar a cor do fundo e do personagem:
A parte do código que me interessa neste exemplo é a seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import com.adobe.images.* var count:int = 1 var bmd_char:BitmapData = new BitmapData(char.width, char.height) var jpg:JPGEncoder = new JPGEncoder(100) var ba:ByteArray var fr:FileReference = new FileReference() save.addEventListener(MouseEvent.MOUSE_DOWN, saveDown) function saveDown(e:MouseEvent){ bmd_char.draw(char) bmd_char.copyPixels(bmd_char,new Rectangle(0,0,char.width,char.height),new Point()) ba = jpg.encode(bmd_char) fr.save(ba,"char_"+count+".jpg") count++; } |
No FLA deste exemplo existe um MovieClip com nome de instância char, o qual é usado para criar o arquivo de imagem. A instância bmd_char captura a imagem da instância char através do método draw(). A instância jpg codifica a informação da instância bmd_char através do método encode(). A instância ba captura a informação da instância jpg. A instância fr coleta os dados da instância ba e abre a caixa de diálogo para salvar o arquivo. E finalmente, a instância save é o botão que, ao ser clicado, faz abrir a caixa de diálogo para salvar o arquivo.
EXEMPLO 2
Neste exemplo, você pode arrastar e mudar a posição do marcador (área delimitada em vermelho) e salvar uma imagem da área indicada:
A parte do código que me interessa neste exemplo é a seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import com.adobe.images.* var count:int = 1 var bmd_photo:BitmapData = new BitmapData(photo.width, photo.height) bmd_photo.draw(photo) var bmd_area:BitmapData = new BitmapData(area.width,area.height) var ba:ByteArray var fr:FileReference = new FileReference() save.addEventListener(MouseEvent.MOUSE_DOWN, saveDown) function saveDown(e:MouseEvent){ bmd_area.copyPixels(bmd_photo,new Rectangle(area.x,area.y,area.width,area.height),new Point()) ba = PNGEncoder.encode(bmd_area) fr.save(ba,"img_"+count+".png") count++; } |
No FLA deste exemplo existe um MovieClip com nome de instância photo, o qual contém a imagem de uma foto. No entanto, neste exemplo criei um marcador que vai mostrar qual área da foto será salva. Então, também existe outro MovieClip, com nome de instância area, o qual vai indicar qual área será salva como imagem. A instância bmd_photo captura a imagem da instância char através do método draw(). A instância bmd_area captura da instância bmd_photo, através do método copyPixels(), os pixéis que correspondem a área indicada pela instância area. O método encode() da classe PNGEncoder é estático, por isso não é necessário uma instância de classe para acessá-lo. A instância ba captura a informação gerada pelo método PNGEncoder.encode(). A instância fr coleta os dados da instância ba e abre a caixa de diálogo para salvar o arquivo. E finalmente, a instância save é o botão que, ao ser clicado, faz abrir a caixa de diálogo para salvar o arquivo.
Salvar MovieClip como Imagem (FLAs salvos como CS4)
Baixado 87 vezes
Tamanho 587.79 kB

em 6 de outubro de 2011
Uia!
Massa esse artigo. Bem útil mesmo o assunto…
Simples, e bastante explicativo.
Valeu igu! =D
em 7 de outubro de 2011
Boa Ígor!
em 7 de outubro de 2011
Bem bacana, parabéns pelo post Igor, nota 10 :)
em 30 de novembro de 2011
Excelente amigo meus parabens !!!
em 2 de dezembro de 2011
Buno, Hugo, Sergio e Paulo…
Obrigado pelos comentarios e pela participaçao no blog.
valeu! :D