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 相关文章推荐
各情景下元素宽高的获取实现代码
Sep 13 Javascript
基于jquery的用鼠标画出可移动的div
Sep 06 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
Jan 15 Javascript
js验证真实姓名与身份证号是否匹配
Oct 13 Javascript
JavaScript字符串对象
Jan 14 Javascript
轻量级JS Cookie插件js-cookie的使用方法
Mar 22 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
Aug 07 Javascript
vue打包相关细节整理(小结)
Sep 28 Javascript
node之本地服务器图片上传的方法示例
Mar 26 Javascript
vue element upload组件 file-list的动态绑定实现
Oct 11 Javascript
uniapp与webview之间的相互传值的实现
Jun 29 Javascript
jquery实现穿梭框功能
Jan 19 jQuery
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获取mysql版本的几种方法小结
2008/03/25 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
JavaScript 学习笔记(四)
2009/12/31 Javascript
jquery json 实例代码
2010/12/02 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
JS设计模式之数据访问对象模式的实例讲解
2017/09/30 Javascript
JS Testing Properties 判断属性是否在对象里的方法
2017/10/01 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
python二叉树遍历的实现方法
2013/11/21 Python
简单介绍Python中的round()方法
2015/05/15 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
使用matplotlib画散点图的方法
2018/05/25 Python
python中使用print输出中文的方法
2018/07/16 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
销售员求职个人的自我评价
2014/02/19 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
2014年库房工作总结
2014/11/26 职场文书
先进单位事迹材料
2014/12/25 职场文书
解除同居协议书
2015/01/29 职场文书
银行自荐信怎么写
2015/03/05 职场文书
工作态度不好检讨书
2015/05/06 职场文书