canvas压缩图片转换成base64格式输出文件流


Posted in Javascript onMarch 09, 2017

昨天研究了一下canvas压缩图片的方法,上传上来给大家分享一下

<!--调用canvas方法-->
 <canvas id="canvas"></canvas>
 <!--压缩后的图片路劲-->
 <img src="" class="preview">
 <img src="" class="preview">
 <!--原图压缩-->
 <img class="source" src="" style="display: none;">
 <img class="source" src="" style="display: none;">
// drawimage三种调用方法
 // ctx.drawImage(Image,dx,dy);
 // ctx.drawImage(Image,dx,dy,dWidth,dHeight);
 // ctx.drawImage(Image,sx,sy,sWidth,sHeight,dx,dy,dWidth,dHeight);
 //images图片元素,出来预判还支持其他三种格式,分别是htmlvideoElement htmlcanvasElement imagebitmap
 //todataurl是canvas画布元素的方法,放回指定的图片格式的data url,也就是base64编码串
 //todataurl方法最多接受两个参数,并且这两个参数都是可选的:
 //type图片格式.支持3种方式,分别是image/jpeg images/png image/webp,默认是image.png
 var canvas = document.getElementById('canvas');
 var source = document.getElementsByClassName('source');
 var preview = document.getElementsByClassName('preview');
 canvas.style.display = "none";
 window.onload = function() {
 //多张图片循环便利压缩
 for(var i = 0; i < preview.length; i++) {
  var width = source[i].width;
  var height = source[i].height;
  var context = canvas.getContext('2d');
  //sx要绘制到canvas画布的源图片区域(矩形)在x轴上偏移量
  var sx = 0;
  //sy要绘制到canvas画布的源图片区域(矩形)在y轴上偏移量
  var sy = 0;
  //swidth要绘制到canvas画布中的源图片区域的宽度,如果没有制定这个值,宽度则是sx到图片最右边的距离
  var sWidth = width;
  //sHeight要绘制到画布中的源图片区域的宽度,如果没有制定这个值,高度则是sy到图片最下边的距离
  var sHeight = height;
  //dx源图片左上角在canvas画布上x轴上偏移量
  var dx = 0;
  //dy源图片左上角在画布y轴上的偏移量
  var dy = 0;
  //dwidth绘制图片的canvas画布宽度
  //dHeight绘制图片的画布高度
  var dWidth = width;
  var dHeight = height;
  var quality = 0.2;
  canvas.width = width;
  canvas.height = height;
  context.drawImage(source[i], sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
  var dataUrl = canvas.toDataURL('image/jpeg', quality);
  preview[i].src = dataUrl;
 }
 // console.info(dataUrl);
 };
 //遍历原图
 for(var i = 0; i < source.length; i++) {
 source[i].src = 'img/' + (i + 1) + '.jpg';
 }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
OfflineSave离线保存代码再次发布使用说明
May 23 Javascript
Jquery 获得服务器控件值的方法小结
May 11 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
Apr 17 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
May 29 Javascript
一个检测表单数据的JavaScript实例
Oct 31 Javascript
js实现多图左右切换功能
Aug 04 Javascript
微信小程序 地图定位简单实例
Oct 14 Javascript
简单理解vue中track-by属性
Oct 26 Javascript
js 判断数据类型的几种方法
Jan 13 Javascript
Vuex之理解state的用法实例
Apr 19 Javascript
微信小程序实现电影App导航和轮播
Nov 30 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
Bootstrap笔记之缩略图、警告框实例详解
Mar 09 #Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
Mar 09 #Javascript
bootstrap实现的自适应页面简单应用示例
Mar 09 #Javascript
js实现3D图片环展示效果
Mar 09 #Javascript
Vue监听数组变化源码解析
Mar 09 #Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
Mar 09 #Javascript
基于jQuery实现一个marquee无缝滚动的插件
Mar 09 #Javascript
You might like
PHP的FTP学习(一)[转自奥索]
2006/10/09 PHP
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
使用PHP Socket写的POP3类
2013/10/30 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
node.js中的fs.readSync方法使用说明
2014/12/17 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
理解javascript中的闭包
2017/01/11 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
如何选择适合你的JavaScript框架
2017/11/20 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
Python 流程控制实例代码
2009/09/25 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
标记环介质访问控制协议
2016/03/27 面试题
客户代表实习人员自我鉴定
2013/09/27 职场文书
大课间活动制度
2014/01/18 职场文书
前台文员职责范本
2014/03/07 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
态度决定一切演讲稿
2014/05/20 职场文书
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
处罚决定书范文
2015/06/24 职场文书
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android