JS和Canvas实现图片的预览压缩和上传功能


Posted in Javascript onMarch 30, 2018

先来一张效果图,压压惊

JS和Canvas实现图片的预览压缩和上传功能

第一步:用户选择需要上传的图片

<input type="file" accept="image/*" type="file"" name="imageFile" onchange="upload()">

在选定了图片后 upload 函数将被触发,我们需要在这个函数中,获取到图片的资源,将它压缩并利用canvas绘制出来,若需要上传到服务器,也可以利用ajax或者其他方式上传。

第二步:获取图片资源压缩预览上传

function upload() { 
  let file = document.querySelector('input[type=file]').files[0] // 获取选择的文件,这里是图片类型 
  let reader = new FileReader() 
    reader.readAsDataURL(file) //读取文件并将文件以URL的形式保存在resulr属性中 base64格式 
    reader.onload = function(e) { // 文件读取完成时触发  
      let result = e.target.result // base64格式图片地址  
      var image = new Image() image.src = result // 设置image的地址为base64的地址  
      image.onload = function(){  
        var canvas = document.querySelector("#canvas");  
        var context = canvas.getContext("2d");  
        canvas.width = image.width; // 设置canvas的画布宽度为图片宽度  
        canvas.height = image.height;  
        context.drawImage(image, 0, 0, image.width, image.height) // 在canvas上绘制图片  
        let dataUrl = canvas.toDataURL('image/jpeg', 0.92) // 0.92为压缩比,可根据需要设置,设置过小会影响图片质量  
                                  // dataUrl 为压缩后的图片资源,可将其上传到服务器  
      }  
    } 
 }

现在我们来比较一下图片是否成功压缩:

原图大小: 

JS和Canvas实现图片的预览压缩和上传功能  

压缩比设置为0.92:

JS和Canvas实现图片的预览压缩和上传功能

压缩比设置为0.52

JS和Canvas实现图片的预览压缩和上传功能

乍一看,你是不是觉得很奇怪,为什么设置了缩放比为0.92,图片居然比原图大?其实图片通过base64编码后都会变的比原图大,具体原因可以查阅base64的编码原理。如此看来,我们已经成功压缩了图片!

注意点:canvas在IE9以下不支持;大图片尽量不要使用base64,影响响应速度。

总结

以上所述是小编给大家介绍的JS和Canvas实现图片的预览压缩和上传功能 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js 自制滚动条的小例子
Mar 16 Javascript
JS来动态的修改url实现对url的增删查改
Sep 05 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
Feb 20 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
Jun 24 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
Aug 05 Javascript
AngularJS转换响应内容
Jan 27 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
Feb 23 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
Jan 03 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
May 17 Javascript
js实现黑白div块画空心的图形
Dec 13 Javascript
Vue路由模块化配置的完整步骤
Aug 14 Javascript
微信小程序HTTP请求从0到1封装
Sep 09 Javascript
Vue单页应用引用单独的样式文件的两种方式
Mar 30 #Javascript
基于js中的存储键值对以及注意事项介绍
Mar 30 #Javascript
angular4 共享服务在多个组件中数据通信的示例
Mar 30 #Javascript
js将键值对字符串转为json字符串的方法
Mar 30 #Javascript
webpack4.0打包优化策略整理小结
Mar 30 #Javascript
Angular4学习笔记router的简单使用
Mar 30 #Javascript
vue.js中created方法作用
Mar 30 #Javascript
You might like
PHP概述.
2006/10/09 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
2007/05/14 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
python 实现任务管理清单案例
2020/04/25 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
EJB3.1都有哪些改进
2012/11/17 面试题
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
商务英语专业求职信范文
2014/01/28 职场文书
施工质量承诺书范文
2014/05/30 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
公司员工奖惩制度
2015/08/04 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
Python3.10的一些新特性原理分析
2021/09/15 Python
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers