网站首页 > 技术文章 正文
"朱哥,昨天试了几把图片上传的功能,感觉还不错,不过有个小问题!"
老朱:“什么问题?”
小白:“小图片上传还好说,大图片上传的时候经常会卡顿一下。”
老朱:“恩,很多人上传图片的时候都是直接上传原图的,很多相机照的原图大小都在4M左右,上传的图片如果都是这么大,不但用户觉得你的网站速度慢,还非常占服务器空间。”
小白:“哦,确实是,很多人压根不知道自己上传的图片到底有多大。”
老朱:“所以我们要让用户进行傻瓜式操作,图片压缩的功能就必不可少。今天我们就用canvas来做一下图片压缩的处理。我们在昨天的基础上增加canvas功能就可以了。”
老朱:“在缩略图下面增加一个canvas,canvas有一个toDataURL方法,可以把当前的canvas绘制的内容进行图片压缩并转换为base64编码,有了base64编码我们就可以发送给图片上传的php页面进行图片上传了。”
老朱继续说道:“知道了压缩的方法,我们只需要解决如果把选择的文件绘制到canvas上面就可以了。还记得我们之前绘制图片的时候用到的Image对象么?”
“记得,绘制图像的时候需要实例化一个Image对象,然后设定Image对象的图片地址src,当图片加载完成以后把图片绘制到canvas上。”
老朱:“恩,流程还记得,不错。Image对象的src属性也可以接收图片base64编码,因此我们可以这样来做。”
“这里我把canvas的宽度设定在500像素,高度根据图片高度进行等比例变化,你可以看一下绘制的效果。”
你看看这张图片的原始大小信息:
“现在通过imgdata=canvas.toDataURL('image/jpeg',0.3);把canvas信息压缩并转为base64编码存到imgdata里面,然后通过jQuery的ajax把imgdata发送给图片上传的php页面就可以了。”
“通过canvas上传以后图片的大小下降到9.65K,应该说是没非常理想了。通过canvas压缩后上传最大的好处是图片在客户端进行处理,处理好以后再往服务器发送,这样传输的数据大小就非常小了。”
老朱最后说:“刚刚我们通过canvas实现了图片压缩上传,真正开发的时候情况会比这个稍微复杂点,我跟你大概说一下,你记住就行了。1、动态生成canvas,这样做的好处是canvas不会显示在页面上。2、判断图片大小,如果图片大小比较小不用压缩直接上传就可以,图片大再进行压缩。3、有时你可能需要隐藏input file,比如上传头像的功能,用户点击头像进行选择图片上传,这时就需要通过点击头像的事件调用input file的点击事件来选择图片。这几个技巧你有时间了可以自己实现一下,不是特别麻烦,我们之前学过的知识足够你解决它们了。”
想学H5的朋友可以关注老炉,您的关注是我持续更新《小白HTML5成长之路》的动力!
猜你喜欢
- 2024-09-10 Python奇淫技巧之自动登录哔哩哔哩(解决滑块验证)
- 2024-09-10 html转image 保存到zip(html保存成图片)
- 2024-09-10 前端上传图片被旋转的处理方案(nba常规赛录像高清回放)
- 2024-09-10 Day 3 学习Canvas这一篇文章就够了
- 2024-09-10 JavaScript实现浏览器本地的图像移动、大小调整和裁剪
- 2024-09-10 微信内置浏览器动态生成二维码并长按识别
- 2024-09-10 Python奇淫技巧之自动登录哔哩哔哩
- 2024-09-10 JSPDF + html2canvas A4分页截断(html做分页)
- 2024-09-10 vue手把手教学~搭建web聊天室(vue简单聊天室)
- 2024-09-10 前端:从零实现一款可视化图片编辑器
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)