宜昌本地软件开发与弱电工程服务商
项目咨询 · 快速响应
您当前的位置: > 博客2 > AS2与AS3技术

[AS3]as3.0图片上传时进行本地预览的源代码示例

2016-10-13 00:16:48 点击量:25 标签: 收藏本文

  在Flash 9之前,含Flash 9,Flash无法实现本地图片预览的功能。Flash 10添加了FileReference.load方法,使得本地图片预览成了可能。使用流程:

  FileReference.browse(),FileReference.load(),以及Loader.loadBytes(FileReference.data),具体使用略过。
这种使用流程存在一个问题,
遇到大图片时,本地预览会存在比较严重的性能问题,预览一张3.5M的图片,内存升到60M,预览15张3M左右大小的图片时,内存飙升到500M,可能会引起用户浏览器崩溃。
http://myadobe.ro/2008/11/24/filereference-the-end-of-upload-tyranny-guest-post-by-andrei-rosca/给出了解决方案。大致的思想是,在Loader加载到图片数据后,做如下处理:

  1. //make the image 50 px in height 
  2. var scale:Number=50/loader.height; 
  3. //and actually resize it 
  4. loader.width*=scale; 
  5. loader.height*=scale; 
  6. loader.width=Math.round(loader.width); 
  7. loader.height=Math.round(loader.height); 
  8. //use a container so we don't need a matrix in BitmapData.draw 
  9. var container:Sprite=new Sprite(); 
  10. container.addChild(loader); 
  11. //take the snapshot 
  12. var bmpData:BitmapData=new BitmapData(container.width,container.height); 
  13. bmpData.draw(container); 
  14. var bmp:Bitmap=new Bitmap(bmpData);  


这样,相当于把图片按比例缩放之后,获取位图数据,转换为Bitmap对象,这样,只需要把Bitmap对象添加到Container中即可实现图片预览。

上述方法只在Flash Player自身运行时有效,对于浏览器中加载swf预览本地图片,还需要做一个操作:

  1. (loader.contentLoaderInfo.content as Bitmap).bitmapData.dispose();//从内存中删除原图的bitmapData引用 
  2. loader.unload(); 


 

ABOUT US
宜昌农人网络科技有限公司

我们是一家提供综合软件外包与弱电工程服务的技术公司。

业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。

公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室