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 相关文章推荐
jQuery 遍历json数组的实现代码
Sep 22 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
Apr 01 Javascript
使用js实现雪花飘落效果
Aug 26 Javascript
js计算任意值之间随机数的方法
Jan 16 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
Aug 26 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
Nov 25 Javascript
Vue.js组件tree实现省市多级联动
Dec 02 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
Jun 12 jQuery
基于vue2.0实现仿百度前端分页效果附实现代码
Oct 30 Javascript
Javascript之高级数组API的使用实例
Mar 08 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
Sep 05 Javascript
Javascript如何实现双指控制图片功能
Feb 25 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读取MySQL数据代码
2008/06/05 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
JavaScript事件列表解说
2006/12/22 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
七个很有意思的PHP函数
2014/05/12 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
python定位xpath 节点位置的方法
2019/08/27 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
高级护理实习生自荐信
2013/09/28 职场文书
环境工程专业个人求职信
2013/12/05 职场文书
六月份红领巾广播稿
2014/02/03 职场文书
2014年终个人工作总结
2014/11/07 职场文书
针对吵架老公保证书
2015/05/08 职场文书
个人催款函范文
2015/06/24 职场文书
JVM之方法返回地址详解
2022/02/28 Java/Android
详解Python中*args和**kwargs的使用
2022/04/07 Python
Linux磁盘管理方法介绍
2022/06/01 Servers
Python序列化模块JSON与Pickle
2022/06/05 Python
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS
Python+DeOldify实现老照片上色功能
2022/06/21 Python