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 相关文章推荐
用Mootools获得操作索引的两种方法分享
Dec 12 Javascript
jquery delay()介绍及使用指南
Sep 02 Javascript
浅谈类似于(function(){}).call()的js语句
Mar 30 Javascript
js实现鼠标点击文本框自动选中内容的方法
Aug 20 Javascript
简介AngularJS中$http服务的用法
Feb 06 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
Oct 10 Javascript
AngularJS获取json数据的方法详解
May 27 Javascript
代码详解JS操作剪贴板
Feb 11 Javascript
vue 的keep-alive缓存功能的实现
Mar 22 Javascript
JS实现Cookie读、写、删除操作工具类示例
Aug 28 Javascript
在vue项目中引用Iview的方法
Sep 14 Javascript
VueCli3.0中集成MockApi的方法示例
Jul 05 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生成随机颜色方法汇总
2014/12/03 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
Python实现爬取并分析电商评论
2020/06/19 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
python脚本第一行如何写
2020/08/30 Python
python识别验证码的思路及解决方案
2020/09/13 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
飞利浦法国官网:Philips法国
2019/07/10 全球购物
连锁经营管理专业大学生求职信
2013/10/30 职场文书
行政主管岗位职责
2013/11/18 职场文书
大学生自我鉴定范文
2013/12/28 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
运动员代表致辞
2015/07/29 职场文书
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript
Java异常体系非正常停止和分类
2022/06/14 Java/Android