·您当前的位置:主页 > 技术教程 > AS2与AS3技术 >

[AS3]iteye.com并保存图片的源代码范例

时间:2017-07-16 11:45iteye.com
[AS3]iteye.com并保存图片的源代码范例

[AS3]iteye.com并保存图片的源代码范例

1. 客户端生成BitmapData 对象。
2. 用JPGEncoder 对其编码相应的字节数组
3 用URLRequest和URLLoader发送数据。
4.服务用request.getInputStream()接收流..
5.保存为图片格式。

  1. package 
  2. ...{ 
  3.     import flash.geom.Point; 
  4.     import flash.geom.Rectangle; 
  5.     import flash.net.URLLoader; 
  6.     import flash.net.URLRequest; 
  7.     import flash.events.* ; 
  8.     import flash.display.*; 
  9.     import flash.geom.* ; 
  10.     import flash.net.*; 
  11.     import flash.utils.ByteArray; 
  12.        
  13.     import com.wdxc.util.* ;    
  14.          
  15.      
  16.     public class Main extends Sprite 
  17.     ...{ 
  18.         private var _picx:int = 0 ; 
  19.         private var _picy:int = 120 ;   
  20.         private var _picwidth = 0 ; 
  21.         private var _picheight = 0 ; 
  22.            
  23.         private var _bitmapdata:BitmapData ; 
  24.        
  25.   
  26.         private var _rect:Sprite ;//裁剪区域      
  27.          
  28.         private var _url:String ="http://192.168.0.211/test.jsp"
  29.      
  30.         public function Main():void...{      
  31.             this.loadPic("F:\a.jpg");   
  32.             this.init(); 
  33.               
  34.         }       
  35.           
  36.         public function init():void ...{ 
  37.             cut_btn.addEventListener(MouseEvent.MOUSE_DOWN, grabPic); 
  38.             save_btn.addEventListener(MouseEvent.MOUSE_DOWN, savePic) ; 
  39.         } 
  40.  
  41.             
  42.         /** *//**** 
  43.          * 装载图片 
  44.          * @param    picurl   
  45.          */    
  46.         public function loadPic(picurl:String):void...{ 
  47.             if (picurl == null || picurl == "") 
  48.             ...{ 
  49.                 return ;     
  50.             } 
  51.             var request:URLRequest = new URLRequest(picurl); 
  52.             var loader:Loader = new Loader() ; 
  53.             loader.load(request); 
  54.             loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHander); 
  55.                  
  56.         } 
  57.          
  58.         /** *//**   
  59.          * 对图片编码并提交给服务端保存。 
  60.          * @param bitmapdata 图片数据   
  61.          */        
  62.         public function submit(bitmapdata:BitmapData):void ...{ 
  63.                   
  64.             //每次URL不同,AS3才会提交每一次,否则将不提交。 
  65.             var url :String = _url+"?"+Math.floor(Math.random()*1000) ;   
  66.             var request:URLRequest = new URLRequest(url);   
  67.               
  68.             //编码成图片格式流 
  69.             var encoder:JPGEncoder = new JPGEncoder(80); 
  70.             var bytes:ByteArray = encoder.encode(bitmapdata);       
  71.              
  72.             request.method = URLRequestMethod.POST; 
  73.             request.data = bytes ;    
  74.                      
  75.             //设置成文件流形式 
  76.             request.contentType = "application/octet-stream"
  77.  
  78.             var loader:URLLoader = new URLLoader();                   
  79.             loader.load(request) ;         
  80.             loader.addEventListener(Event.COMPLETE, sendCompleteHandler) ;   
  81.         } 
  82.              
  83.         /** *//** 
  84.          * 服务端保存完回调 
  85.          * @param    e 
  86.          */ 
  87.         private function sendCompleteHandler(e:Event):void ...{ 
  88.             trace("save success........");      
  89.         }   
  90.            
  91.         /** *//** 
  92.          * 保存裁剪图片 
  93.          * @param    e 
  94.          */ 
  95.         private function savePic(e:MouseEvent)...{ 
  96.               
  97.             //组装要裁剪区域     
  98.             var cutpic:Rectangle = new Rectangle(_rect.x,_rect.y,_rect.width,_rect.height); 
  99.             var bitmapdata:BitmapData = this.getCutData(_bitmapdata, cutpic);   
  100.              
  101.             var bitmap:Bitmap = new Bitmap(bitmapdata) ;            
  102.             bitmap.x = 100 ; 
  103.             bitmap.y = 0 ;   
  104.             //只显示裁剪区域图片,去除其他空位置   
  105.             this.addChild(bitmap);     
  106.             this.submit(cutbitmapdata);        
  107.         }    
  108.            
  109.         /** *//**    
  110.          * 获取所裁剪区域的数据。所有像素信息 
  111.          * @param source        源图数据    
  112.          * @param rect          所有裁剪的区域      
  113.          * @return BitmapData   裁剪出新图的数据 
  114.          */ 
  115.         public function getCutData(source:BitmapData,rect:Rectangle):BitmapData ...{ 
  116.             //存放裁剪出的新图片 
  117.             var cutbitmapdata:BitmapData = new BitmapData(Math.floor(_rect.width),Math.ceil(_rect.height)) ; 
  118.                     
  119.             //坐标转化,把坐标移到裁剪区域的位置,宽度和高度在cutbitmapdata里指定。 
  120.             var matrix:Matrix = new Matrix(1, 0, 0, 1, -Math.floor(_rect.x), -Math.floor(_rect.y)); 
  121.               
  122.             cutbitmapdata.draw(_bitmapdata, matrix);   
  123.             return cutbitmapdata ;   
  124.         } 
  125.          
  126.  
  127.  
  128.  
  129.         /** *//****   
  130.          * 装载图片完成之后,显示图片到场景 
  131.          * @param    e 
  132.          */ 
  133.         private function completeHander(e:Event):void ...{ 
  134.             var loader:Loader = e.target.loader as Loader; 
  135.                 
  136.             this._picwidth = loader.width ; 
  137.             this._picheight = loader.height ;       
  138.             _bitmapdatanew BitmapData(loader.width, loader.height); 
  139.             _bitmapdata.draw(loader); 
  140.             var _bitmap:Bitmap = new Bitmap(_bitmapdata);         
  141.             _bitmap.x = this._picx; 
  142.             _bitmap.y = this._picy ; 
  143.             this.addChild(_bitmap); 
  144.         } 
  145.          
  146.         /** *//****       
  147.          * 生成裁剪区域框,用来抓起图片 
  148.          * @param    e      
  149.          */     
  150.         private function grabPic(e:MouseEvent):void 
  151.         ...{ 
  152.             
  153.             _rectnew Sprite () ; 
  154.              
  155.             /** *//***设置裁剪区域边框样式*/ 
  156.             _rect.graphics.lineStyle(3, 0xFF0000, 0.5, true, LineScaleMode.NONE, CapsStyle.ROUND); 
  157.             _rect.graphics.beginFill(0xCCFF00,0);    
  158.             _rect.graphics.drawRect(this._picx, this._picy, this._picwidth/4,this._picheight/4); 
  159.             _rect.graphics.endFill();   
  160.             _rect.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler) ; 
  161.             _rect.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandle) ; 
  162.             this.addChild(_rect) ;          
  163.         } 
  164.           
  165.         /** *//** 
  166.          * 鼠标控制裁剪区域,可拖动,拉伸。 
  167.          * @param    e 
  168.          */ 
  169.         private function mouseDownHandler(e:MouseEvent):void ...{ 
  170.               
  171.             //裁剪区域移动范围,不能超过原图区域。 
  172.             var _rectangle:Rectangle = new Rectangle(); 
  173.             _rectangle.width = _picwidth-_rect.width ; 
  174.             _rectangle.height = _picheight-_rect.height ;        
  175.             _rect.startDrag(false,_rectangle);              
  176.         } 
  177.           
  178.         private function mouseUpHandle(e:MouseEvent):void ...{ 
  179.             _rect.stopDrag(); 
  180.         } 
  181.     } 

微信付费直播
酷播云免费在线视频整体解决方案
参与开学季云视频优惠,拿GET2017教育科技大会VIP门票
进入开学季,保利威视推出云视频优惠,云视频套餐、流量超实惠大放“价”就是现在,还可以免费获取GET2017教育科技大会VIP门票哦!