Search code examples
actionscript-3airimage-resizing

How to resize image before uploading it ?


In my AIR app, the user can take a photo (from CameraRoll or CameraUI) and save it to a server.

Is there a way to automatically resize the image (800x600) in order to have a lighter file ?

Here's my code :

    var now:Date = new Date();
    var saveDirectory:String= "MyApp/PhotoUploads";
    var fileName:String = "MyPhoto" + now.fullYear + now.month + now.day + now.hours + now.minutes + now.seconds + ".jpg";
    var photoFile:File=File.documentsDirectory.resolvePath(saveDirectory+"/"+ fileName);

 function imageSelected( event:MediaEvent ):void{
    var mp:MediaPromise = event.data;

dataSource = mp.open();
 readMediaData();
}


function readMediaData():void{

    var imageBytes:ByteArray = new ByteArray();
     dataSource.readBytes( imageBytes );
    var stream:FileStream = new FileStream();
    stream.addEventListener( Event.CLOSE,photoFileSaved);
    stream.openAsync( photoFile,FileMode.WRITE); 
    stream.writeBytes( imageBytes );
    stream.close();
    }    

 function photoFileSaved(evt:Event):void{
     photoUpload();
 }

 function photoUpload():void{
     photoFile.upload( req );
     photoFile.addEventListener( ProgressEvent.PROGRESS, progress_func );
     photoFile.addEventListener( IOErrorEvent.IO_ERROR, ioErrorMedia );
     photoFile.addEventListener( Event.COMPLETE, complete_func );
 }

Apparently I can't do :

mp.width = 200;
mp.height= 200;

So how can I do that ?


Solution

  • var scale:Number = .6;
    
    var m:Matrix = new Matrix();
    m.scale (scale,scale);
    
    var bmp:BitmapData = new BitmapData(sourceMc.width, sourceMc.height, false);
    bmp.draw (sourceMc,m);