博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flash AS3截图保存
阅读量:4654 次
发布时间:2019-06-09

本文共 1662 字,大约阅读时间需要 5 分钟。

在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

你可能感兴趣的文章
关于 C# 中 Events 和 Thread Safety
查看>>
C# 推箱子(只有一关)
查看>>
crossapp的屏幕适配
查看>>
__getattribute__
查看>>
编译器的工作过程
查看>>
快速排序
查看>>
一系列网络流题目-2016.10.17
查看>>
第一次作业
查看>>
Codeforces Round #216 (Div. 2) E. Valera and Queries 树状数组 离线处理
查看>>
webpack初识一
查看>>
day 32 css后续补充以及js 简单入门
查看>>
android ViewSwitcher实现程序列表分屏和动画效果(仿Launcher)
查看>>
各版本android源码下载
查看>>
Android ADT安装
查看>>
nodejs初体验
查看>>
C# 将DataTable表中的数据批量插入到数据库表中的方法
查看>>
前博客 http://bbs.landingbj.com/mytopic.jsp?action=mytopic&username=57071
查看>>
edgeR使用学习【转载】
查看>>
2018徐州网络赛H. Ryuji doesn't want to study
查看>>
nodejs REPL清屏
查看>>