actionscript3.0 图片裁剪及保存jpg详解




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(1001-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 () ; 
            
OutliningIn
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值