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

发布时间 - 2026-01-11 00:05:40    点击率:

昨天研究了一下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';
 }

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


# canvas  # base64  # 小程序中canvas的drawImage方法参数使用详解  # 微信小程序canvas.drawImage完全显示图片问题的解决  # JS移动端/H5同时选择多张图片上传并使用canvas压缩图片  # Vue使用canvas实现图片压缩上传  # JS和Canvas实现图片的预览压缩和上传功能  # Js利用Canvas实现图片压缩功能  # Canvas drawImage方法实现图片压缩详解  # 偏移量  # 则是  # 如果没有  # 三种  # 都是  # 最多  # 遍历  # 这两个  # 可选  # 大家分享  # 放回  # 多张  # 昨天  # 上传  # ctx  # Image  # drawImage  # console  # display  # js 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Mybatis 中的insertOrUpdate操作  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Java遍历集合的三种方式  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  如何在宝塔面板中创建新站点?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  如何在阿里云购买域名并搭建网站?  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  EditPlus中的正则表达式 实战(4)  海南网站制作公司有哪些,海口网是哪家的?  Laravel如何创建自定义中间件?(Middleware代码示例)  Android滚轮选择时间控件使用详解  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  如何在香港免费服务器上快速搭建网站?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  清除minerd进程的简单方法  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  Python面向对象测试方法_mock解析【教程】  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  教你用AI润色文章,让你的文字表达更专业  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  晋江文学城电脑版官网 晋江文学城网页版直接进入  如何快速查询网站的真实建站时间?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  简历没回改:利用AI润色让你的文字更专业  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  如何用花生壳三步快速搭建专属网站?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  什么是javascript作用域_全局和局部作用域有什么区别?  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  Laravel如何实现多对多模型关联?(Eloquent教程)  中山网站推广排名,中山信息港登录入口?  昵图网官方站入口 昵图网素材图库官网入口  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  如何快速生成高效建站系统源代码?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)