as3中截图并保存图片的源代码范例

本文详细介绍使用ActionScript 3 (AS3) 进行截图并上传至服务器的方法。包括生成BitmapData对象、图片编码、数据发送及服务端保存流程。适用于希望了解AS3图片处理的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[AS3]as3中截图并保存图片的源代码范例

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 () ; 
                 
                /** *//***设置裁剪区域边框样式*/ 
                _rect.graphics.lineStyle(3, 0xFF0000, 0.5, true, LineScaleMode.NONE, CapsStyle.ROUND); 
                _rect.graphics.beginFill(0xCCFF00,0);    
                _rect.graphics.drawRect(this._picx, this._picy, this._picwidth/4,this._picheight/4); 
                _rect.graphics.endFill();   
                _rect.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler) ; 
                _rect.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandle) ; 
                this.addChild(_rect) ;          
            } 
              
            /** *//** 
             * 鼠标控制裁剪区域,可拖动,拉伸。 
             * @param    e 
             */ 
            private function mouseDownHandler(e:MouseEvent):void ...{ 
                  
                //裁剪区域移动范围,不能超过原图区域。 
                var _rectangle:Rectangle = new Rectangle(); 
                _rectangle.width = _picwidth-_rect.width ; 
                _rectangle.height = _picheight-_rect.height ;        
                _rect.startDrag(false,_rectangle);              
            } 
              
            private function mouseUpHandle(e:MouseEvent):void ...{ 
                _rect.stopDrag(); 
            } 
        } 
    } 

服务端处理代码

<% 
     
    String filePath = request.getRealPath(System.currentTimeMillis()+".jpg"); 
    System.out.print("filepath=="+filePath); 
    BufferedInputStream inputStream = new BufferedInputStream(request.getInputStream()); 
    FileOutputStream outputStream = new FileOutputStream(new File(filePath)); 
    byte [] bytes = new byte[1024]; 
     
    int v; 
    while((v=inputStream.read(bytes))>0){ 
        outputStream.write(bytes,0,v); 
    } 
    outputStream.close(); 
    inputStream.close(); 
%> 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值