博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaScript旋转Base64图片并得到新的base64数据
阅读量:6277 次
发布时间:2019-06-22

本文共 2606 字,大约阅读时间需要 8 分钟。

javaScript旋转Base64图片并得到新的base64数据

不合理的地方欢迎小伙伴雅正

js旋转base64图片90*N度,并产生新的base64数据

项目开发中,甲方希望上传图片的时候可以调整图片的方向,这也是一个合理要求,不合理又怎么样呢。

时间紧迫,我立刻阅览资料,寄希望与现成的插件,网上的思路是有了,就是利用canvas做图片旋转,然后用todataURL()函数生产base64数据,思路是对的,就是函数都不好用,然后自己决定做一个吧。

DOM样例,点击下面的旋转按钮就能生成宣传后的base64数据

clipboard.png

具体函数的代码就贴在下面了,三个参数

  1. src:图片链接,无论是url地址还是base64数据都可以
  2. edg:旋转角度,注意必须是90°的倍数,否则代码报错,非90°的旋转的根据业务需要裁切裁切,用到的话小伙伴可以动动手修改一下函数
  3. callback:因为img的load是个异步的,所以这才采取回调函数处理load成功的事件,回调的参数就是图片旋转后的base64的数据
function rotateBase64Img(src, edg, callback) {      var canvas = document.createElement("canvas");      var ctx = canvas.getContext("2d");      var imgW;//图片宽度      var imgH;//图片高度      var size;//canvas初始大小      if (edg % 90 != 0) {          console.error("旋转角度必须是90的倍数!");          throw '旋转角度必须是90的倍数!';      }      (edg < 0) && (edg = (edg % 360) + 360)      const quadrant = (edg / 90) % 4; //旋转象限      const cutCoor = {sx: 0, sy: 0, ex: 0, ey: 0}; //裁剪坐标      var image = new Image();      image.crossOrigin = "anonymous"      image.src = src;      image.onload = function () {          imgW = image.width;          imgH = image.height;          size = imgW > imgH ? imgW : imgH;          canvas.width = size * 2;          canvas.height = size * 2;          switch (quadrant) {              case 0:                  cutCoor.sx = size;                  cutCoor.sy = size;                  cutCoor.ex = size + imgW;                  cutCoor.ey = size + imgH;                  break;              case 1:                  cutCoor.sx = size - imgH;                  cutCoor.sy = size;                  cutCoor.ex = size;                  cutCoor.ey = size + imgW;                  break;              case 2:                  cutCoor.sx = size - imgW;                  cutCoor.sy = size - imgH;                  cutCoor.ex = size;                  cutCoor.ey = size;                  break;              case 3:                  cutCoor.sx = size;                  cutCoor.sy = size - imgW;                  cutCoor.ex = size + imgH;                  cutCoor.ey = size + imgW;                  break;          }          ctx.translate(size, size);          ctx.rotate(edg * Math.PI / 180);          ctx.drawImage(image, 0, 0);          var imgData = ctx.getImageData(cutCoor.sx, cutCoor.sy, cutCoor.ex, cutCoor.ey);          if (quadrant % 2 == 0) {              canvas.width = imgW;              canvas.height = imgH;          } else {              canvas.width = imgH;              canvas.height = imgW;          }          ctx.putImageData(imgData, 0, 0);          callback(canvas.toDataURL())      };    }

函数略大,不优雅,有什么不合理的地方欢迎小伙伴批评指正,共励共勉。

DOM源码链接
下载即用。

转载地址:http://nogpa.baihongyu.com/

你可能感兴趣的文章
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
关于FreeBSD的CVSROOT的配置
查看>>
基于RBAC权限管理
查看>>
基于Internet的软件工程策略
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
PyCairo指南--目录
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
Linux/centos 下挂载硬盘的 方法
查看>>
数据库
查看>>
Vue------第二天(计算属性、侦听器、绑定Class、绑定Style)
查看>>
DICOM医学图像处理:WEB PACS初谈
查看>>
maven assembly plugin使用
查看>>
5: Calling Programs(Working with programs)
查看>>
QML学习笔记-入门篇(2)
查看>>