[AS3]as3.0图片上传时进行本地预览的源代码示例
在Flash 9之前,含Flash 9,Flash无法实现本地图片预览的功能。Flash 10添加了FileReference.load方法,使得本地图片预览成了可能。使用流程:
FileReference.browse(),FileReference.load(),以及Loader.loadBytes(FileReference.da
这种使用流程存在一个问题,
遇到大图片时,本地预览会存在比较严重的性能问题,预览一张3.5M的图片,内存升到60M,预览15张3M左右大小的图片时,内存飙升到500M,可能会引起用户浏览器崩溃。
http://myadobe.ro/2008/11/24/filereference-the-end-of-upload-tyranny-guest-post-by-andrei-rosca/给出了解决方案。大致的思想是,在Loader加载到图片数据后,做如下处理:
- //make the image 50 px in height
- var scale:Number=50/loader.height;
- //and actually resize it
- loader.width*=scale;
- loader.height*=scale;
- loader.width=Math.round(loader.width);
- loader.height=Math.round(loader.height);
- //use a container so we don't need a matrix in BitmapData.draw
- var container:Sprite=new Sprite();
- container.addChild(loader);
- //take the snapshot
- var bmpData:BitmapData=new BitmapData(container.width,container.height);
- bmpData.draw(container);
- var bmp:Bitmap=new Bitmap(bmpData);
这样,相当于把图片按比例缩放之后,获取位图数据,转换为Bitmap对象,这样,只需要把Bitmap对象添加到Container中即可实现图片预览。
上述方法只在Flash Player自身运行时有效,对于浏览器中加载swf预览本地图片,还需要做一个操作:
- (loader.contentLoaderInfo.content as Bitmap).bitmapData.dispose();//从内存中删除原图的bitmapData引用
- loader.unload();
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例