Adobe Flex学习笔记(10)- Flex保…

因为flash不能访问客户端的文件系统,所以不能像AIR应用那样来保存图片,在flex中保存图片要借助服务器端来实现。我先简单描述一下思路。
首先通过一个Image组件获得该图片,然后用BitmapData的draw()方法来加载该图片,再把它转换成字节数组,把该字节数组发给服务器端,服务器接受到该字节数组,通过该字节数组来生成图片,然后保存在一个路径下。
把图片转换成字节数组要用到编码器,在mx.graphics.codec包下有mx.graphics.codec.PNGEncoder和mx.graphics.codec.JPEGEncoder两个编码器,前者用来给png图片编码,后者用来给jpg图片编码。操作相应的图片要选择相应的编码器,(似乎没有对gif图片进行编码的类,怎样操作gjf图片我还不清楚)下面我用java的servlet来做后台,(.net和php其实思想一样)给出前后台的所有代码。(我用png来说明,jpg其实一个道理)
mxml:
<mx:Application>
<mx:Script>
    <![CDATA[
      import mx.graphics.codec.PNGEncoder;
        import mx.controls.Image;
        import flash.display.Bitmap;     
        import flash.display.BitmapData;
        import flash.display.Loader;
  private function saveImg():void
        {
          var bitmap:BitmapData = new BitmapData(bitImg.width,bitImg.height,true);    //这里的bitImg就是Image组件的id
          bitmap.draw(bitImg);
          var pngEnc = new PNGEncoder();        //如果是jpg则为 var jpegEnc:JPEGEncoder = new JPEGEncoder(75);这个75参数表示压缩质量,越高越好,一般就选70到100就行了,也可以不写 

          var imageBytes:ByteArray = pngEnc.encode(bitmap);    //jpg为 jpegEnc.encode(bitmap);
          imageBytes.position = 0;      //这句是把指针移到当前字节数组的位置,好像不写这句也行,我也不太明白这句
          var req:URLRequest = new URLRequest(" http://localhost:8080/ImgSys/save"); //这句很重要,url地址就是后台的servlet的地址,这里我建立了一个名为ImgSys的动态web项目,save指向一个servlet
          req.data = imageBytes;    //这个请求的数据就是刚才生成的字节数组
          req.method = URLRequestMethod.POST;    //方法为post,也可以写成req.method =  "POST";
          req.contentType = "application/octet-stream";  //这句很重要,表明请求为文件流
          var loader:URLLoader = new URLLoader();
          loader.load(req);        //这句开始像后台发请求
//这里可以添加2个方法,来监听出错和完成,我没有写
          //loader.addEventListener(Event.COMPLETE, loaderComplete);
          //loader.addEventListener(IOErrorEvent.IO_ERROR, loadeIOError);
        }
  ]]>
  </mx:Script>
<mx:Image id="bitImg" src="E:/1.png"  />
<mx:Button label="save" click="saveImg()"/>
</mx:Application>
java:我就直接给出servlet和web.xml配置文件
private void doPost(HttpServletRequest req, HttpServletResponse resp) {
    // TODO Auto-generated method stub
    String path = "E:/2.png";//  把刚才的1.png存一个2.png
    try{
          BufferedInputStream inputStream = new BufferedInputStream(req.getInputStream());
          FileOutputStream outputStream = new FileOutputStream(new File(path));
          byte [] bytes = new byte[1024];
          int v;
          while((v=inputStream.read(bytes))>0){
                  outputStream.write(bytes,0,v);
          }
          outputStream.close();
          inputStream.close();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
web.xml
  <servlet>
    <description>
    </description>
    <display-name>ImgManager</display-name>      //我的servlet名为ImgManager
    <servlet-name>ImgManager</servlet-name>
    <servlet-class>com.img.ImgManager</servlet-class>
  </servlet> 
  <servlet-mapping>
    <servlet-name>ImgManager</servlet-name>
    <url-pattern>/save</url-pattern>        //这个save的url映射决定了mxml中那个url的地址
  </servlet-mapping> 
 
<script type="text/javascript" id="wumiiRelatedItems"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值