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 相关文章推荐
自动检查并替换文本框内的字符
Jun 30 Javascript
javascript import css实例代码
Jul 18 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
ExtJS的拖拽效果示例
Dec 09 Javascript
js函数参数设置默认值的一种变通实现方法
May 26 Javascript
avalonjs实现仿微博的图片拖动特效
May 06 Javascript
jquery仿QQ登录账号选择下拉框效果
Mar 22 Javascript
jQuery实现字符串全部替换的方法
Dec 12 Javascript
jQuery实现的浮动层div浏览器居中显示效果
Feb 03 Javascript
jquery easyui如何实现格式化列
Jul 30 jQuery
vue.js整合vux中的上拉加载下拉刷新实例教程
Jan 09 Javascript
JS代码简洁方式之函数方法详解
Jul 28 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
php获取QQ头像并显示的方法
2014/12/23 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
php实现小程序支付完整版
2018/10/09 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
js脚本实现数据去重
2014/11/27 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
跟老齐学Python之print详解
2014/09/28 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python实现数据库编程方法详解
2015/06/09 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
解析Python的缩进规则的使用
2019/01/16 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
追悼会子女答谢词
2014/01/28 职场文书
道路交通安全实施方案
2014/03/12 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
python实现的web监控系统
2021/04/27 Python
教你一步步实现一个简易promise
2021/11/02 Javascript
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python