下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】HTML5怎么实现图片压缩上传功能
这篇文章将为大家详细讲解有关HTML5怎么实现图片压缩上传功能,在下觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。大致思路是:1、创建一个图片和一个canvasXML/HTMLCode复制内容到剪贴板2、我们将input中选择的图片地址通过FileReader获取后赋给新建的图片对象,然后将图片对象丢到canvas画布上。XML/HTMLCode复制内容到剪贴板这里需要注意的是,canvas将图片画到画布上的时候需要确定canvas的尺寸,同时设定好drawImage的参数,具体如下:XML/HTMLCode复制内容到剪贴板voidctx.drawImage(image,sx,sy,sWidth,sHeight,dx,dy,dWidth,dHeight);dx源图像的左上角在目标canvas上X轴的位置。dy源图像的左上角在目标canvas上Y轴的位置。dWidth在目标canvas上绘制图像的宽度。允许对绘制的图像进行缩放。如果不说明,在绘制时图片宽度不会缩放。dHeight在目标canvas上绘制图像的高度。允许对绘制的图像进行缩放。如果不说明,在绘制时图片高度不会缩放。sx需要绘制到目标上下文中的,源图像的矩形选择框的左上角X坐标。sy需要绘制到目标上下文中的,源图像的矩形选择框的左上角Y坐标。sWidth需要绘制到目标上下文中的,源图像的矩形选择框的宽度。如果不说明,整个矩形从坐标的sx和sy开始,到图像的右下角结束。sHeight需要绘制到目标上下文中的,源图像的矩形选择框的高度。为了上传完整的图片,这里dx,dy必须设置为0,dWidth和dHeight必须设置为原始图片的宽度和高度。这就是为什么我们需要等image对象下载完毕后获取其原始尺寸,这很关键!3、图片上传XML/HTMLCode复制内容到剪贴板这里用的关键方法是canvas.toDataURLXML/HTMLCode复制内容到剪贴板canvas.toDataURL(type,encoderOptions);官方的说明是TheHTMLCanvasElement.toDataURL()methodreturnsadataURIcontainingarepresentationoftheimageintheformatspecifiedbythetypeparameter(defaultstoPNG).Thereturnedimageisinaresolutionof96dpi.实际上就是读取canvas画布上图片的数据。其默认是png格式,如果第一个参数type是image/jpeg的话,第二个参数encoderOptions就可以用来设置图片的压缩质量,经过测试,如果是png格式,100%的宽高经过该方法还有可能使图片变大~~~~适得其反,所以我们可以在canvas.drawImage的时候适当设置sWidth和sHeight,比如同比例缩小1.5倍等,图片质量其实并不太影响查看,尤其对尺寸比较大的图片来说。上面还有比较陌生的方法atob,其作用是做解码,因为图片格式的base64.XML/HTMLCode复制内容到剪贴板varencodedData=window.btoa("Hello,world");//encodeastringvardecodedData=window.atob(encodedData);//decodethestring该方法解码出来可能是一堆乱码,Uint8Array返回的是8进制整型数组。Blob是存储二进制文件的容器,典型的Blob对象是一个图片或者声音文件,其默认是PNG格式。XML/HTMLCode复制内容到剪贴板varblob=newBlob([ia],{type:"image/jpeg"});最后通过ajax将Blob对象发送到server即可。整个流程大致如上,但是~~~实现以后测试跑来说:“你不是说图片压缩了吗,为什么图片还是上传那么慢!”,哥拿起手机对妹纸演示了一下,明明很快嘛,于是反道“是你手机不行或者网络不好吧,你下载图片看明明变小了,比之前肯定快,你看我秒传”。呵呵,说归说,还是偷偷检查代码,在浏览器中打时间log,对比没压缩之前的,尼玛!!!居然才快了几百毫秒!!折腾了半天,之前的代码也重构了,玩我呢。细心的大神看了上面的代码估计能猜出问题在哪,没错,获取本地图片长宽尺寸的时候出了问题。我去,获取本地4M大小的图片尺寸花了3174ms!!,图片越大时间也越久~JavaScriptCode复制内容到剪贴板浏览器在本地取图片的时候是没法直接像file.size一样获取其长宽的,只能通过FileReader拿到内容后赋值给新建的image对象,新建的image对象下载需要时间!怎么破?不就是获取本地图片的尺寸吗,难道没有别的办法了?于是想到了之前研究过的快速获取图片长宽的博文,点击进入,demo地址:/jivugadure/edit?html,js,output,定时去查询图片加载过程中的高度或者宽度,不用等整个图片加载完毕。测了下,还是不行,因为定时查询这种方法对常规的server返回的图片有作用,这里图片地址是base64,貌似时间还更久了~哭。小结一下:1、用HTML5来压缩图片上传是可行的,在移动端我们不用依赖客户端或者插件,目前主流浏览器支持程度已经很高了。2、压缩图片一方面是想减少用户上传等待的时间,另外也减少用户为此牺牲的流量,从整体时间来看,因为获取图片尺寸导致多一次下载需要耗时,其实压不压缩时间差别并不是特别大。除非大神们找到合适的方法能够直接获取图片的尺寸,麻烦也告知我一声,万分感谢;3、既然时间成本差不多,但是我们压缩了图片,减少了图片的大小,减少了流量的消耗,存储空间以及下次获取该图片的时间,所以还是值得的。补充源代码:Java
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (3篇)2024大学辅导员个人工作总结
- 教师政治思想及职业道德方面的考核报告
- 2024年淮南联合大学高职单招职业技能测验历年参考题库(频考版)含答案解析
- 乌鲁木齐市八年级上学期期末地理试题及答案
- 二零二五年旅游开发项目合同2篇
- 2024年陕西省妇幼保健院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 2024年河南艺术职业学院高职单招职业适应性测试历年参考题库含答案解析
- 2024年阜阳市第三人民医院阜阳市中心医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 2024年长春市妇产科医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 2024年江西工商职业技术学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 健康食品开发及生产协议
- 数字孪生产业发展及轨道交通领域的应用研究
- 2024年中学总务处工作总结
- 手术室各级人员培训
- 教育部中国特色学徒制课题:基于中国特色学徒制的新形态教材建设与应用研究
- 2025年护理质量与安全管理工作计划
- (T8联考)2025届高三部分重点中学12月第一次联考评物理试卷(含答案详解)
- 工程施工扬尘防治教育培训
- 红薯采购合同模板
- 2023年河南省公务员录用考试《行测》真题及答案解析
- 山西省太原市重点中学2025届物理高一第一学期期末统考试题含解析
评论
0/150
提交评论