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 相关文章推荐
Javascript this关键字使用分析
Oct 21 Javascript
javascript中文本框中输入法切换的问题
Dec 10 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
Jun 05 Javascript
JavaScript生成随机字符串的方法
Mar 19 Javascript
js兼容火狐获取图片宽和高的方法
May 21 Javascript
jQuery实现购物车表单自动结算效果实例
Aug 10 Javascript
JavaScript修改作用域外变量的方法
Mar 25 Javascript
EasyUI折叠表格层次显示detailview详解及实例
Dec 28 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
Mar 08 Javascript
Javascript调试之console对象——你不知道的一些小技巧
Jul 10 Javascript
JavaScript实现各种排序的代码详解
Aug 28 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
Sep 30 Javascript
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下检测字符串是否是utf8编码的代码
2008/06/28 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
php定界符
2014/06/19 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
原生JS轮播图插件
2017/02/09 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
React diff算法的实现示例
2018/04/20 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
python3之模块psutil系统性能信息使用
2018/05/30 Python
python使用正则表达式(Regular Expression)方法超详细
2019/12/30 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
聊聊python中的循环遍历
2020/09/07 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
会计系个人求职信范文分享
2013/12/20 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
离婚起诉状范本
2015/05/19 职场文书