压缩上传并预览 flash
最近研究一个功能:用as3写的上传图片并实现预览。觉得花了很多时间也学到很多知识,将自己的所得记录下来供大家分享。
首先是预览功能的实现,大家自然而然就想到了loader来加载图片并显示,由于项目没有对图片大小进行限制,所以加载的时候会非常慢。场景:如果同时加载100张5M以上的图片,内存可能会升到1000M以上,导致机器卡死。
解决方案:
1.不要同时加载100张图片,一张加载完再加载下一张。 这个是参照网易相册的上传功能,qq空间的上传功能来源于插件,qq相册也是flash写的,仍存在很卡的问题
2.如果需要多个loader来加载,图片就需要用bitmap显示出来,并将loader释放掉内存,方式是:
(loader.contentLoaderInfo.content as Bitmap).bitmapData.dispose();//从内存中删除原图的bitmapData引用
loader.unload(); loader = null;//将loader置为空
当然,用一个loader更好,直接通过loader控制大小显示成缩略图,也不用释放掉
3.用filereference打开本地图片,记得在加载完图片释放掉filereference数据,方式是:
filereference.data.clear();//不清除,内存会一直很高
4.当加载的图片很多,会想到用scrollpane,但是一方面滚动条不美观,另一方面会碰到一些浏览器兼容问题,像有的浏览器的滚动事件会失效,我的处理方式是自己重写滚动条,通过遮罩控制显示区域,并用js监听滚轮事件,可以参照 http://www.cnblogs.com/meteoric_cry/archive/2013/01/06/2848221.html
然后是上传功能的问题,首先了解上传的3中方式,参照http://blog.csdn.net/txiejun/article/details/6934107因为是压缩上传,我们想到了用urlLoader进行二进制上传,关键问题是urlLoader无法监听上传进度事件,解决方案来源于http://stackoverflow.com/questions/9559948/post-file-upload-using-urlrequest,利用filereference来上传二进制,根据文章和实践发现,上传时仍然会报错,于是我们把上传的二进制转化成字符串就没问题了,压缩是通过jpgEncoder进行的,因为效率比较低,显示压缩进度会给用户更好的体验。
(上传功能这一块,出现误区,就是用filereference上传二进制的方式,虽然实现了二进制的上传,实际却把原图一起上传了,这样很占带宽,仍在找方案)
经验总结:关注内存,关注用户体验
压缩上传并预览 flash的更多相关文章
- vue开发中vue-resource + canvas 图片压缩、上传、预览
1.使用vue-resource上传,也可以自定义ajax上传: 2.使用<input type="file" @change="submit()" na ...
- Jcrop+uploadify+php实现上传头像预览裁剪
最近由于项目需要,所以做了一个上传头像预览并且可以预览裁剪的功能,大概思路是上传的图片先保存到服务器,然后通过ajax从服务器获取到图片信息,再利用Jcrop插件进行裁剪,之后通过PHP获取到的四个裁 ...
- input file实现多选,限制文件上传类型,图片上传前预览功能
限制上传类型 & 多选:① accept 属性只能与 <input type="file" /> 配合使用.它规定能够通过文件上传进行提交的文件类型. ② mu ...
- servlet实现文件上传,预览,下载和删除
一.准备工作 1.1 文件上传插件:uploadify: 1.2 文件上传所需jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jar 1.3 将数 ...
- 小程序实现图片上传,预览以及图片base64位处理
最近一段时间在做小程序项目,第一期功也完工了.需要好好总结一下经验,把项目中遇到的问题好好总结一下,遇到的问题,踩过的坑.今天写一个小程序实现图片上传,预览,以及删除,图片base64位处理.下面就是 ...
- hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images
hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images, 本例子主要是使用HTML5 的File API,建立一個可存取到该file的url, 一个空的img标签,ID为img0,把 ...
- html之file标签 --- 图片上传前预览 -- FileReader
记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...
- 【转】HTML5 jQuery图片上传前预览
hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images,本例子主要是使用HTML5 的File API,建立一個可存取到该 file的url,一个空的img标签,ID为img0,把选 ...
- ASP.NET MVC图片上传前预览
回老家过春节,大半个月,在家的日子里,吃好睡好,人也长了3.5Kg.没有电脑,没有网络,无需写代码,工作上相关的完全放下......开心与父母妻儿过个年,那样的生活令Insus.NET现在还在留恋.. ...
随机推荐
- win8以管理员身份安装软件
win8以管理员身份安装软件 msiexec /package
- 原生JavaScript实现的addclass,removeclass,hasclass,toggleclass,getbyclass
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 黄聪:PHP5.6+7代码性能加速-开启Zend OPcache-优化CPU
说明 PHP 5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的).对于PHP 5.5以下版本的,需要使用APC加速,这里不说明,可以自行上网搜索PHP APC加速的方法 ...
- storm的作业单元:Topology
Storm系统的数据处理应用单元,是被打包的被称为Topology的作业. 它是由多个数据处理阶段组合而成的,而每个处理阶段在构造时被称为组件(Component),在运行时被称为任务. 那么,组件根 ...
- spark1.4加载mysql数据 创建Dataframe及join操作连接方法问题
首先我们使用新的API方法连接mysql加载数据 创建DF import org.apache.spark.sql.DataFrame import org.apache.spark.{SparkCo ...
- codeforces 323A. Black-and-White Cube 构造
输入n 1 <= n <= 100 有一个n * n * n 的立方体,由n ^ 3 个1 * 1 * 1 的单位立方体构成 要用white 和 black 2种颜色来染这n ^ 3个立方 ...
- git 命令的使用(一) add commit push pull
一. commit 和 push 的区别 git作为支持分布式版本管理的工具,它管理的库(repository)分为本地库.远程库.git commit操作的是本地库,git push操作的是远程库. ...
- C++模板元编程 - 2 模仿haskell的列表以及相关操作
这是昨天和今天写的东西,利用C++的可变模板参数包以及包展开,模式匹配的一些东西做的,感觉用typename...比轮子叔那个List<A,List<B, List<C, D> ...
- memcpy
函数原型 void *memcpy(void*dest, const void *src, size_t n); 功能 由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始 ...
- C++学习22 多态的概念及前提条件
在<C++基类和派生类的赋值>一节中讲到,基类的指针也可以指向派生类对象.请看下面的例子: #include <iostream> using namespace std; c ...