`
z75148885
  • 浏览: 191317 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多

-
-
 
DIY部落社区最新活动:
[java]一个java技术性的问题
[java]java基础编程 悬赏100分
[操作系统]你觉的Windows哪个系统好?
2009.8.27-9.27日活动
[java]MP3可以做什么用
发起论坛活动请点击这里

 

 

--------------------------------------------------------------------------------
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();
%> 


文章出处:http://www.diybl.com/course/3_program/java/javajs/2008419/110560.html

分享到:
评论

相关推荐

    ActionScript 3.0 API文档及Flex开发详解电子书

    《Flex 3 RIA开发详解与精深实践》PDF及 配套代码 (1)《ActionScript 3.0 语言和组件参考》概述 《ActionScript 3.0 语言参考》是 Flash® Player 和 Adobe AIR™ 应用程序编程接口 (API) 的参考手册。 此版本...

    ActionScript 3.0 API文档(CHM+HTML最新中文完整)

    《ActionScript 3.0 语言和组件参考》概述 《ActionScript 3.0 语言参考》是 Flash® Player 和 Adobe AIR™ 应用程序编程接口 (API) 的参考手册。 此版本包括支持 Adobe AIR 运行时环境的新 ActionScript 类、...

    ActionScript 3.0开发技术大全(第一部分)

    第1篇 ActionScript3.0语言基础  第1章 ActionScript3.0概述  第2章 搭建ActionScript3.0开发环境  第3章 ActionScript3.0语法 第2篇 ActionScript3.0面向对象特性  第4章 ActionScript3.0面向对象编程  第...

    actionscript3.0图片展示

    这次我们关注的是一个利用ActionScript 3.0进行图片展示的项目,标题为"actionscript3.0图片展示"。描述中提到,这是一个基于XML的图片加载方案,包含缓动效果,适合初学者作为入门教程来学习。 首先,让我们深入...

    Flash ActionScript3.0教程示例(从入门到精通).rar

    《Flash ActionScript3.0教程示例(从入门到精通)》是一本全面解析ActionScript3.0编程语言在Flash平台上的应用的教程。ActionScript3.0是Adobe Flash Professional中的核心编程语言,用于创建交互式动画、游戏、富...

    ActionScript3.0 Game Programing中文版

    《ActionScript3.0 Game Programming》是一本专为游戏开发者设计的权威教程,中文版的出版使得更多中国读者能够深入理解和掌握ActionScript3.0在游戏开发中的应用。这本书不仅覆盖了ActionScript的基础语法和面向...

    Flash ActionScript 3.0语言参考及教程(共七本)

    7. **Flash ActionScript 3.0动画教程_Foundation_Actionscript3.0_Animation_CN.pdf**:作为基础教程,这本书可能讲解了如何使用ActionScript 3.0进行基本动画制作,包括帧动画、补间动画、形状补间以及如何与图形...

    ActionScript3.0宝典 pdf 高清晰

    ActionScript 3.0 是Adobe开发的一种编程语言,主要用于创建交互式内容,特别是在Flash和Flex平台上。这个“ActionScript 3.0 宝典”很可能是一本全面介绍该语言的教程,适合初学者和有一定经验的开发者。PDF版本...

    ActionScript 3.0 编程.rar

    ActionScript 3.0 是Adobe开发的一种面向对象的编程语言,主要用于创建富互联网应用程序(RIA,Rich Internet Applications),尤其是在Flash平台上。它极大地提升了Flash Player和Adobe AIR应用的性能和功能,使得...

    actionscript 3.0动画制作教程

    ActionScript 3.0是Adobe Flash Professional、Flash Player以及Adobe AIR中的主要编程语言,用于创建交互式内容、游戏和富互联网应用程序(RIA)。本教程针对ActionScript 3.0的动画制作进行了深入讲解,旨在帮助...

    ActionScript3.0完全自学手册电子教案_ActionScript3.0_

    ActionScript3.0是Adobe开发的一种面向对象的编程语言,主要用于创建富互联网应用程序(RIA),尤其是在Flash平台上。它是Flash Professional、Flash Builder等工具的核心组成部分,让开发者能够为网页、桌面和移动...

    Flash ActionScript 3.0 编程技术教程(附书光盘)

    第6~9章介绍了ActionScript 3.0的核心——类及以类为基础的面向对象程序设计方法,包括类的基本概念、ActionScript 3.0中常用类的使用、显示编程和组件类;第10、11章分别介绍了几个ActionScript 3.0实际应用的范例...

    ActionScript3.0 图片切场效果

    在探讨“ActionScript3.0 图片切场效果”这一主题时,我们深入解析了如何在Flash中利用AS3.0实现多种动态图像过渡效果,这些技术不仅为动画设计者提供了丰富的视觉表现手段,同时也展示了AS3.0作为一款强大编程语言...

    Flex ActionScript 3.0交互式开发详解源码(四)

    在本主题"Flex ActionScript 3.0交互式开发详解源码(四)"中,我们将深入探讨这个强大的开发工具和技术。 一、ActionScript 3.0基础 ActionScript 3.0相较于之前的版本,有了显著的性能提升和更严谨的类型系统。它...

    Foundation ActionScript 3.0 Animation

    《Foundation ActionScript 3.0 Animation》是一本...《foundation Actionscript3.0 Animation.pdf》这个文件很可能是这本书的电子版,包含完整的章节内容和可能的练习案例,对于自学或者参考来说是非常宝贵的资源。

    最专业的ActionScript 3.0

    【ActionScript 3.0详解】 ActionScript 3.0是一种强大的编程语言,主要用于实现Flex应用的业务逻辑和控制,与MXML一起构成了Flex应用程序开发的基础。ActionScript 3.0在Flash Player运行环境中执行,借助...

    ActionScript 3.0动态绘制正弦曲线(附源码)

    ActionScript 3.0是Adobe Flash Professional和Flex SDK中用于创建富互联网应用程序(RIA)的主要编程语言。在“ActionScript 3.0动态绘制正弦曲线”这个项目中,开发者利用了AS3的强大功能来创建可视化图形,特别是...

    Flex ActionScript 3.0交互式开发详解源码(一)

    Flex ActionScript 3.0是Adobe Flex框架中的编程语言,用于构建富互联网应用程序(RIA)。这个压缩包包含的资源是关于如何使用ActionScript 3.0进行交互式开发的详细教程,特别适合初学者和进阶开发者提升技能。源码...

Global site tag (gtag.js) - Google Analytics