Come salvare immagini in Flash CS3
lunedì 31 marzo, 2008Con Flash CS3 l'uso delle Bitmap è così migliorato che viene subito voglia di creare un piccolo Paint. Abbiamo già visto come realizzare un piccolo Paint (vedi Creare un'applicazione Paint in Flash CS3 Painter: semplice applicazione per disegno in Flash CS3 Pro) in grado di supportare un vero e proprio "cancellino" - funzione erase, grazie ad un uso particolare di layer Shape e Bitmap. Diciamo subito che Flash (a differenza di Flex) non permette ne encoding (tipo JPG o PNG) ne salvataggio automatico di immagini Bitmap. Tuttavia si può aggirare l'ostacolo sfruttando uno scripting lato server e la capacità di Flash di inviare dati in POST.
LA TEORIA
L'artifizio che possiamo usare è il seguente: leggiamo i dati contenuti in una Bitmap pixel per pixel, li trasformiamo in valori esadecimali e li inviamo in POST ad una pagina PHP (in questo esempio sfruttiamo PHP e la GD Library per creare effettivamente l'immagine, ma altre soluzioni sono ugualmente efficaci).
Diciamo subito che l'unico neo di questa tecnica è l'estrema lentezza, almeno con Bitmap abbastanza grandi (io ho provato con una Bitmap 640 x 300)!
Inoltre, come vedrete nel codice Actionscript, non è possibile controllare il progress dell'invio, ma solo ottenere l'evento del completamento di tutto il lavoro; Actionscript + PHP.
LA PRATICA
Data una Bitmap l'algoritmo da usare può essere il seguente:
-
/**
-
** @prototype : 0.0.1
-
** @author : =undo=
-
** @email : g.fazioli@undolog.com
-
** @web : http://www.undolog.com
-
**
-
** @params :
-
**
-
** __bitmap : puntatore alla nostra bitmap
-
** __width : larghezza in pixel
-
** __height : altezza in pixel
-
**
-
*/
-
-
// copia per la lettura - questo potrebbe essere evitato
-
var sbmp:BitmapData = new BitmapData(__width, __height);
-
sbmp.draw ( __bitmap );
-
//
-
var pixels:Array = new Array();
-
for (var xx:uint = 0; xx <= __width; xx++) {
-
for (var yy:uint = 0; yy <= __height; yy++) {
-
pixels.push( sbmp.getPixel32(xx, yy).toString(16) );
-
}
-
}
-
//
-
var urlreq:URLRequest = new URLRequest( "http://miodominio.com/savebitmap.php" );
-
var urlpar:URLVariables = new URLVariables();
-
var urlldr:URLLoader = new URLLoader();
-
//
-
urlldr.addEventListener( Event.COMPLETE,
-
function (e:Event):void {
-
trace( ' Completato' );
-
}
-
);
-
//
-
urlpar.pixels = pixels.toString();
-
urlpar.height = __height;
-
urlpar.width = __width;
-
urlreq.data = urlpar;
-
urlreq.method = URLRequestMethod.POST;
-
urlldr.load( urlreq );
Come codice PHP possiamo usare:
-
/**
-
** @prototype : 0.0.1
-
** @author : =undo=
-
** @email : g.fazioli@undolog.com
-
** @web : http://www.undolog.com
-
**
-
** @params :
-
**
-
** __bitmap : puntatore alla nostra bitmap
-
** __width : larghezza in pixel
-
** __height : altezza in pixel
-
**
-
*/
-
// $pixels diventa un array con i valori dei singoli pixel
-
$width = $_POST['width'];
-
$height = $_POST['height'];
-
// creo l'immagine - @evitando di emettere errori
-
// Scrivo i pixel per tutta la lunghezza e altezza
-
$index = 0;
-
for($x=0; $x<=$width; $x++){
-
for($y=0; $y<=$height; $y++){
-
$index++;
-
}
-
}
-
// scrivo immagine (in JPG - ma potete usare un diverso formato) sul disco/server
Torneremo prossimamente sull'argomento proponendo anche altre soluzioni...
Riferimenti e webgrafia:
- http://www.actionscripts.org/forums/showthread.php3?p=420106
- http://www.quasimondo.com/archives/000645.php
- Export a movie clip from Flash to an image file using C#/ASP.NET and ActionScript's BitmapData



















werutzb ha detto:
Hi!
I would like make better my SQL capabilities.
I red really many SQL books and would like to
read more about SQL for my occupation as mysql database manager.
What would you recommend?
Thanks,
Werutz
Abramovicl ha detto:
Hi , i have some questions about you desing
maybe you can give designer contacts?