返回

#yyds干货盘点#前端canvas图片压缩

发布时间:2023-11-28 02:52:00 167

图片压缩算法

      通过canvasAPI进行在Web端上传的时候进行图片压缩。

通过宽高压缩(第一次压缩 - Canvas宽高)
通过API压缩(第二次压缩 - HTMLCanvasDom.toDataURL())

简述步骤

  1. 通过input输入框用来坐上传,通过chang事件获得上传的文件。
  2. 对上传的文件进行一些简单的类型,大小的判断然后开始压缩。
  3. 压缩图片第一步将用户上传的图片(file)转为base64格式-new FileReader() -> ReaderAsDataUrl()异步读取 -> load事件读取完成获取base64
  4. 计算压缩图片宽高(等比例),创建Canvas画布赋值新的宽高。(第一次压缩尺寸)然后将canvasDom进行隐藏,挂载到dom节点上。
  5. getContext('2d')获得canvas对象,调用drawImage方法进行绘制。
  6. 然后通过CanvasHTMLDOM调用toDataURL方法将整个canvas画布输出成base64格式。(第二次压缩)
  7. 删除CanvasDOM,然后将压缩后的base64通过callback传入到服务端中就可以了。

Tips

  •   通过change事件进行异步完成监听
  •   new FileReader() -> reader.readAsDataURL(file) 读取上传文件 => reader.result获得base64格式的上传图片
  •   压缩对宽度和高度进行压缩 naturalWidth/naturalHeihgt   HTML5属性获得源生图片高度宽度
  •   创建Canvas标签赋值压缩后的宽高
  •   隐藏使用visibility-hidden 仅仅是样式隐藏。因为visibility属性隐藏可以获取DOM
  •   ctx.clearReact() ->   每次重新上传文件要清除Canvas画布,防止图片覆盖。
  •   ctx.drawImage()通过canvas绘制对应文件。
  •   HTMLCanvasDOM.toDataUrl()
      将canvas画布转化成base64格式同时进行压缩,得到返回值。
  •   压缩成功,使用callback传入新的Data URL进行向后台发送逻辑请求。

代码演示







canvas图片压缩算法








特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
Vue.js -- 生命周期函数(钩子) 2023-11-27 23:52:45