Flash AS3截图保存

在Flash AS3中上传图片的一般方法为 FileReference 的 upload 方法.

但前提是图片是存在于客户端本地的文件,而不能是存在于内存的数据流。也就是说,在Flash运行过程中生成的图片,除非先用save方法保存至磁盘,否则不可。

 

我在找寻答案的过程中,曾经听说应将图片数据转换为Base64字符串来传输,但这会使传输量大增,说明此并非好方法。

一个可以使用的方法是,将图片保存为byteArray,通过 URLLoader来上传。在服务器端,将其接收保存成图片。

 

[Flash 端]

 

   //截图

   var jpgSource:BitmapData=new BitmapData();
   jpgSource.draw(一个DisplayObjectContainer);

 

   //将图片保存为 ByteArray
   var jpgEncoder:JPGEncoder=new JPGEncoder(100);
   var jpgStream:ByteArray=jpgEncoder.encode(jpgSource);

 

 

   //使用URLRequest,URLLoader来上传

   var request:URLRequest = new URLRequest(后台接收图片的url); 

   var loader:URLLoader = new URLLoader(); 
           

   //data值就为图片编码数据ByteArray;  
   request.data = jpgStream;
   request.method = URLRequestMethod.POST;  
   //传输内容类型必须是下面文件流形式;  
   request.contentType = "application/octet-stream";  
                        
   loader.addEventListener(Event.COMPLETE, completeHandler);  
   loader.load(request);

 

   private function completeHandler(e:Event):void 
            trace(e.target.data);  
   }

 

 

[.net 端]

protected void Page_Load(object sender, EventArgs e)
    {
        if (true)
        {
            string saveToFolder = "要保存的位置";
            string Path = Server.MapPath(saveToFolder);

 

            //通过Resquest.InputStream解收的是Stream形式,转换成byte[]形式

            Stream s = Request.InputStream;

            byte[] bt = StreamToBytes(s);

 

            //将byte[]形式转换成MemoryStream形式,再保存为图片

            System.IO.MemoryStream ms = new System.IO.MemoryStream(bt);

            System.Drawing.Bitmap b = new System.Drawing.Bitmap(ms);

            b.Save(Path + "/proj.jpg");

            Response.Write(true);

            Response.End();

 

        }
    }

 

    //此函数将Stream转换成byte[]

    public byte[] StreamToBytes(Stream stream)
    {
        byte[] bytes = new byte[stream.Length];
        stream.Read(bytes, 0, bytes.Length);
        // 设置当前流的位置为流的开始 
        stream.Seek(0, SeekOrigin.Begin);
        return bytes;
    }

转载于:https://www.cnblogs.com/fzqblog/archive/2013/05/05/3061161.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值