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 相关文章推荐
JavaScript的document对象和window对象详解
Dec 30 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
Mar 04 Javascript
Javascript中判断变量是数组还是对象(array还是object)
Aug 14 Javascript
js this函数调用无需再次抓获id,name或标签名
Mar 03 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
Mar 24 Javascript
js省市联动效果完整实例代码
Dec 09 Javascript
javascript函数自动执行常用方法汇总
Mar 28 Javascript
JavaScript作用域示例详解
Jul 07 Javascript
关于JS中的方法是否加括号的问题
Jul 27 Javascript
基于JavaScript实现Tab选项卡切换效果
Nov 24 Javascript
js实现无限瀑布流实例方法
Sep 16 Javascript
JavaScript实现像雪花一样的Hexaflake分形
Jul 07 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通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
PHP简单创建压缩图的方法
2016/08/24 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
基于jQuery的获得各种控件Value的方法
2010/11/19 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
Python Queue模块详解
2014/11/30 Python
理解Python中函数的参数
2015/04/27 Python
python正则表达式之作业计算器
2016/03/18 Python
python实现定时提取实时日志程序
2018/06/22 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
教师实习期自我鉴定
2013/10/06 职场文书
好的自荐信包括什么内容
2013/11/07 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
五分钟演讲稿
2014/04/30 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
抢劫罪辩护词
2015/05/21 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS