[AIR] Télécharger une image en provenance d'un serveur sur le disque dur de l'utilisateur



Téléchargement de l'image

Télécharger des images de façon transparente pour l'utilisateur, c'est-à-dire sans FileReference.save(), peut être très intéressant quand on créé une application personnalisable. Bref, je me suis penché sur le sujet.

On charge l'image avec un Loader.

var monImage:URLRequest=new URLRequest(); 
monImage.url="http://www.monSite.fr/image.png"; 
var monLoader:Loader = new Loader ( ) ;  
monLoader.contentLoaderInfo.addEventListener ( Event.COMPLETE, onImageLoaded ) ;  
monLoader.load ( monImage ) ;  

Téléchargement de l'image

Télécharger des images de façon transparente pour l'utilisateur, c'est-à-dire sans FileReference.save(), peut être très intéressant quand on créé une application personnalisable. Bref, je me suis penché sur le sujet.

On charge l'image avec un Loader.

var monImage:URLRequest=new URLRequest(); 
monImage.url="http://www.monSite.fr/image.png"; 
var monLoader:Loader = new Loader ( ) ;  
monLoader.contentLoaderInfo.addEventListener ( Event.COMPLETE, onImageLoaded ) ;  
monLoader.load ( monImage ) ;  

Enregistrement de l'image

Une fois que l'image est chargée, on créé un bitmapData à partir de la propriété content du Loader. Comme nous allons nous servir de la méthode writeBytes de l'objet FileStream afin d'écrire et enregistrer l'image en tant que fichier PNG, il nous faut convertir le bitmapData en byteArray. Pour ce faire, on utilise la classe PNGEncoder (il existe aussi un JPGEncoder).

private function onImageLoaded ( evt : Event ) : void {  
    trace('image chargée'); 
    var bitmap:Bitmap= Bitmap ( evt.target.content ) ; 
    var bitmapData:BitmapData = bitmap.bitmapData; 
    var pngEncoder:PNGEncoder = new PNGEncoder();  
    var byteArray:ByteArray = pngEncoder.encode( bitmapData ); 
    var filename:String = "copie2.png"; 
    var file:File = File.applicationStorageDirectory.resolvePath( filename );  
    var file:File = new File( file.nativePath ); 
    var stream:FileStream = new FileStream(); 
    stream.open( file , FileMode.WRITE); 
    stream.writeBytes ( byteArray, 0, byteArray.length ); 
    stream.close();  
}	

N'oubliez pas l'importation import mx.graphics.codec.PNGEncoder;

A noter que cette librairie est intégrée nativement dans le SDK FLEX. Il vous faudra sans doute télécharger la librairie (AS3 CORELIB) si vous utilisez une autre IDE.

Enregistrement de l'image

Une fois que l'image est chargée, on créé un bitmapData à partir de la propriété content du Loader. Comme nous allons nous servir de la méthode writeBytes de l'objet FileStream afin d'écrire et enregistrer l'image en tant que fichier PNG, il nous faut convertir le bitmapData en byteArray. Pour ce faire, on utilise la classe PNGEncoder (il existe aussi un JPGEncoder).

private function onImageLoaded ( evt : Event ) : void {  
    trace('image chargée'); 
    var bitmap:Bitmap= Bitmap ( evt.target.content ) ; 
    var bitmapData:BitmapData = bitmap.bitmapData; 
    var pngEncoder:PNGEncoder = new PNGEncoder();  
    var byteArray:ByteArray = pngEncoder.encode( bitmapData ); 
    var filename:String = "copie2.png"; 
    var file:File = File.applicationStorageDirectory.resolvePath( filename );  
    var file:File = new File( file.nativePath ); 
    var stream:FileStream = new FileStream(); 
    stream.open( file , FileMode.WRITE); 
    stream.writeBytes ( byteArray, 0, byteArray.length ); 
    stream.close();  
}	

N'oubliez pas l'importation import mx.graphics.codec.PNGEncoder;

A noter que cette librairie est intégrée nativement dans le SDK FLEX. Il vous faudra sans doute télécharger la librairie (AS3 CORELIB) si vous utilisez une autre IDE.

Laissez un commentaire:

blog comments powered by Disqus Comments