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 相关文章推荐
js类中获取外部函数名的方法与代码
Sep 12 Javascript
jQuery 源代码显示控件 (Ajax加载方式).
May 18 Javascript
js window.open弹出新的网页窗口
Jan 16 Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 Javascript
关于javascript事件响应的基础语法总结(必看篇)
Dec 26 Javascript
基于es6三点运算符的使用方法(实例讲解)
Oct 12 Javascript
react学习笔记之state以及setState的使用
Dec 07 Javascript
利用Javascript实现一套自定义事件机制
Dec 14 Javascript
vue响应式系统之observe、watcher、dep的源码解析
Apr 09 Javascript
详解微信小程序回到顶部的两种方式
May 09 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
Jul 20 Javascript
springboot+VUE实现登录注册
May 27 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 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
javascript hashtable 修正版 下载
2010/12/30 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
2014/09/25 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
python遍历类中所有成员的方法
2015/03/18 Python
在Python程序中实现分布式进程的教程
2015/04/28 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
python中setuptools的作用是什么
2020/06/19 Python
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
十八大闭幕感言
2014/01/22 职场文书
公司捐款倡议书
2014/05/14 职场文书
党员志愿者活动总结
2014/06/26 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
2015政治思想表现评语
2015/03/25 职场文书
抢劫罪辩护词
2015/05/21 职场文书
舞出我人生观后感
2015/06/16 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
Linux中各个目录的作用与内容
2022/06/28 Servers