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 相关文章推荐
6个DIV 135或246间隔一秒轮番显示效果
Jul 24 Javascript
JS Map 和 List 的简单实现代码
Jul 08 Javascript
js中substring和substr的详细介绍与用法
Aug 29 Javascript
JavaScript实现将xml转换成html table表格的方法
Apr 17 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
Jun 10 Javascript
利用JS提交表单的几种方法和验证(必看篇)
Sep 17 Javascript
JavaScript数据结构之二叉树的删除算法示例
Apr 13 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
Oct 13 jQuery
详解angular应用容器化部署
Aug 14 Javascript
Angular2 自定义表单验证器的实现方法
Dec 14 Javascript
如何在项目中使用log4.js的方法步骤
Jul 16 Javascript
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
Mar 17 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
网站当前的在线人数
2006/10/09 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
学习PHP session的传递方式
2016/06/15 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
shiro授权的实现原理
2017/09/21 Javascript
nodejs项目windows下开机自启动的方法
2017/11/22 NodeJs
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
Python解决走迷宫问题算法示例
2018/07/27 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
python调用自定义函数的实例操作
2019/06/26 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
大一期末自我鉴定
2013/12/13 职场文书
高校教师思想汇报
2014/01/11 职场文书
个人现实表现材料
2014/02/04 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
商务司机岗位职责
2015/04/10 职场文书
校园广播稿范文
2015/08/19 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS
Java中的随机数Random
2022/03/17 Java/Android