1. 客户端生成BitmapData 对象。
2. 用JPGEncoder 对其编码相应的字节数组
3 用URLRequest和URLLoader发送数据。
4.服务用request.getInputStream()接收流..
5.保存为图片格式。
package
... {
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.* ;
import flash.display.*;
import flash.geom.* ;
import flash.net.*;
import flash.utils.ByteArray;
import com.wdxc.util.* ;
public class Main extends Sprite
...{
private var _picx:int = 0 ;
private var _picy:int = 120 ;
private var _picwidth = 0 ;
private var _picheight = 0 ;
private var _bitmapdata:BitmapData ;
private var _rect:Sprite ;//裁剪区域
private var _url:String ="http://192.168.0.211/test.jsp";
public function Main():void...{
this.loadPic("F:\a.jpg");
this.init();
}
public function init():void ...{
cut_btn.addEventListener(MouseEvent.MOUSE_DOWN, grabPic);
save_btn.addEventListener(MouseEvent.MOUSE_DOWN, savePic) ;
}
/** *//****
* 装载图片
* @param picurl
*/
public function loadPic(picurl:String):void...{
if (picurl == null || picurl == "")
...{
return ;
}
var request:URLRequest = new URLRequest(picurl);
var loader:Loader = new Loader() ;
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHander);
}
/** *//**
* 对图片编码并提交给服务端保存。
* @param bitmapdata 图片数据
*/
public function submit(bitmapdata:BitmapData):void ...{
//每次URL不同,AS3才会提交每一次,否则将不提交。
var url :String = _url+"?"+Math.floor(Math.random()*1000) ;
var request:URLRequest = new URLRequest(url);
//编码成图片格式流
var encoder:JPGEncoder = new JPGEncoder(80);
var bytes:ByteArray = encoder.encode(bitmapdata);
request.method = URLRequestMethod.POST;
request.data = bytes ;
//设置成文件流形式
request.contentType = "application/octet-stream";
var loader:URLLoader = new URLLoader();
loader.load(request) ;
loader.addEventListener(Event.COMPLETE, sendCompleteHandler) ;
}
/** *//**
* 服务端保存完回调
* @param e
*/
private function sendCompleteHandler(e:Event):void ...{
trace("save success........");
}
/** *//**
* 保存裁剪图片
* @param e
*/
private function savePic(e:MouseEvent)...{
//组装要裁剪区域
var cutpic:Rectangle = new Rectangle(_rect.x,_rect.y,_rect.width,_rect.height);
var bitmapdata:BitmapData = this.getCutData(_bitmapdata, cutpic);
var bitmap:Bitmap = new Bitmap(bitmapdata) ;
bitmap.x = 100 ;
bitmap.y = 0 ;
//只显示裁剪区域图片,去除其他空位置
this.addChild(bitmap);
this.submit(cutbitmapdata);
}
/** *//**
* 获取所裁剪区域的数据。所有像素信息
* @param source 源图数据
* @param rect 所有裁剪的区域
* @return BitmapData 裁剪出新图的数据
*/
public function getCutData(source:BitmapData,rect:Rectangle):BitmapData ...{
//存放裁剪出的新图片
var cutbitmapdata:BitmapData = new BitmapData(Math.floor(_rect.width),Math.ceil(_rect.height)) ;
//坐标转化,把坐标移到裁剪区域的位置,宽度和高度在cutbitmapdata里指定。
var matrix:Matrix = new Matrix(1, 0, 0, 1, -Math.floor(_rect.x), -Math.floor(_rect.y));
cutbitmapdata.draw(_bitmapdata, matrix);
return cutbitmapdata ;
}
/** *//****
* 装载图片完成之后,显示图片到场景
* @param e
*/
private function completeHander(e:Event):void ...{
var loader:Loader = e.target.loader as Loader;
this._picwidth = loader.width ;
this._picheight = loader.height ;
_bitmapdata= new BitmapData(loader.width, loader.height);
_bitmapdata.draw(loader);
var _bitmap:Bitmap = new Bitmap(_bitmapdata);
_bitmap.x = this._picx;
_bitmap.y = this._picy ;
this.addChild(_bitmap);
}
/** *//****
* 生成裁剪区域框,用来抓起图片
* @param e
*/
private function grabPic(e:MouseEvent):void
...{
_rect= new Sprite () ;
... {
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.* ;
import flash.display.*;
import flash.geom.* ;
import flash.net.*;
import flash.utils.ByteArray;
import com.wdxc.util.* ;
public class Main extends Sprite
...{
private var _picx:int = 0 ;
private var _picy:int = 120 ;
private var _picwidth = 0 ;
private var _picheight = 0 ;
private var _bitmapdata:BitmapData ;
private var _rect:Sprite ;//裁剪区域
private var _url:String ="http://192.168.0.211/test.jsp";
public function Main():void...{
this.loadPic("F:\a.jpg");
this.init();
}
public function init():void ...{
cut_btn.addEventListener(MouseEvent.MOUSE_DOWN, grabPic);
save_btn.addEventListener(MouseEvent.MOUSE_DOWN, savePic) ;
}
/** *//****
* 装载图片
* @param picurl
*/
public function loadPic(picurl:String):void...{
if (picurl == null || picurl == "")
...{
return ;
}
var request:URLRequest = new URLRequest(picurl);
var loader:Loader = new Loader() ;
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHander);
}
/** *//**
* 对图片编码并提交给服务端保存。
* @param bitmapdata 图片数据
*/
public function submit(bitmapdata:BitmapData):void ...{
//每次URL不同,AS3才会提交每一次,否则将不提交。
var url :String = _url+"?"+Math.floor(Math.random()*1000) ;
var request:URLRequest = new URLRequest(url);
//编码成图片格式流
var encoder:JPGEncoder = new JPGEncoder(80);
var bytes:ByteArray = encoder.encode(bitmapdata);
request.method = URLRequestMethod.POST;
request.data = bytes ;
//设置成文件流形式
request.contentType = "application/octet-stream";
var loader:URLLoader = new URLLoader();
loader.load(request) ;
loader.addEventListener(Event.COMPLETE, sendCompleteHandler) ;
}
/** *//**
* 服务端保存完回调
* @param e
*/
private function sendCompleteHandler(e:Event):void ...{
trace("save success........");
}
/** *//**
* 保存裁剪图片
* @param e
*/
private function savePic(e:MouseEvent)...{
//组装要裁剪区域
var cutpic:Rectangle = new Rectangle(_rect.x,_rect.y,_rect.width,_rect.height);
var bitmapdata:BitmapData = this.getCutData(_bitmapdata, cutpic);
var bitmap:Bitmap = new Bitmap(bitmapdata) ;
bitmap.x = 100 ;
bitmap.y = 0 ;
//只显示裁剪区域图片,去除其他空位置
this.addChild(bitmap);
this.submit(cutbitmapdata);
}
/** *//**
* 获取所裁剪区域的数据。所有像素信息
* @param source 源图数据
* @param rect 所有裁剪的区域
* @return BitmapData 裁剪出新图的数据
*/
public function getCutData(source:BitmapData,rect:Rectangle):BitmapData ...{
//存放裁剪出的新图片
var cutbitmapdata:BitmapData = new BitmapData(Math.floor(_rect.width),Math.ceil(_rect.height)) ;
//坐标转化,把坐标移到裁剪区域的位置,宽度和高度在cutbitmapdata里指定。
var matrix:Matrix = new Matrix(1, 0, 0, 1, -Math.floor(_rect.x), -Math.floor(_rect.y));
cutbitmapdata.draw(_bitmapdata, matrix);
return cutbitmapdata ;
}
/** *//****
* 装载图片完成之后,显示图片到场景
* @param e
*/
private function completeHander(e:Event):void ...{
var loader:Loader = e.target.loader as Loader;
this._picwidth = loader.width ;
this._picheight = loader.height ;
_bitmapdata= new BitmapData(loader.width, loader.height);
_bitmapdata.draw(loader);
var _bitmap:Bitmap = new Bitmap(_bitmapdata);
_bitmap.x = this._picx;
_bitmap.y = this._picy ;
this.addChild(_bitmap);
}
/** *//****
* 生成裁剪区域框,用来抓起图片
* @param e
*/
private function grabPic(e:MouseEvent):void
...{
_rect= new Sprite () ;