用JS怎么实现点击上传的图片可以旋转的功能
Admin 2022-06-23 群英技术资讯 745 次浏览
最近在做一个有关人脸采集的项目,然后在编写前端模块时,遇到了一个问题,就是当客户上传照片或直接拍照上传时,会遇到有些图片可能会90度翻转过来所以,我们需要给个按钮客户让客户自己可以对照品进行旋转效果大致如下
图1.正常图片上传
图2.图片左旋转
图3.图片右旋转
以上就是一个图片旋转功能
下面我们就开始代码部分吧
这里我采取了一个方法,然后当前我的图片格式是base64,如果遇到其它格式也无所谓,因为我们最终的效果还是要转为image对象来实现的
/** * 图片旋转 * @param direction 旋转的方向 */ rotate (direction) { const img = new Image() // 这里的思维就是,把图片映射到一个画板上,然后对图片进行重新绘制,所以这里要建一个canvas对象来充当我们的画板 const canvas = document.createElement('canvas') // base64转换image对象 img.src = this.uploadImage // 这里记得一定要在base64转换成图片对象后再进行其它操作,笔者在这里踩了个坑,onload方法就是图片加载再进行其它操作,如果图片是文件路径方式跨域调用效果更加明显 img.onload = () => { // img的高度和宽度不能在img元素隐藏后获取,否则会出错 const height = img.height const width = img.width // 旋转角度以弧度值为参数 const ctx = canvas.getContext('2d') if (direction === 'right') { canvas.width = height canvas.height = width ctx.rotate(90 * Math.PI / 180) ctx.drawImage(img, 0, 0, width, -height) } else { canvas.width = height canvas.height = width ctx.rotate(-90 * Math.PI / 180) ctx.drawImage(img, 0, 0, -width, height) } // 旋转后的图片重新转为base64 this.uploadImage = this.getBase64Image(img, canvas) } }, /** * 把image文件转为base64 */ getBase64Image (img, canvas) { const ctx = canvas.getContext('2d') ctx.drawImage(img, 0, 0, img.width, img.height) const ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase() return canvas.toDataURL('image/' + ext) }
注意:如果图片是跨域获取的话这里可能会使canvas转回base64出现问题,这时可能需要开启代理来进行图片获取
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Vue为我们提供了很多高级特性,学习和掌握它们有助于提高你的代码水平
本文实例为大家分享了vue实现列表无缝循环滚动的具体代码,供大家参考,具体内容如下
javascript中的math.random()是用来生成随机数的,其使用语法如“Math.floor(Math.random() * 10 + 1);”,该语句能在连续整数中取得一个随机数。
如何使用Node.js进行爬取?下面本篇文章带大家聊聊使用Node.js开发一个简单图片爬取功能,希望对大家有所帮助!
目录前言案例回顾原型的拓展前言设计模式呢最多的可能是用到类,我们去通过类来封装一些实用的方法,通过设计模式去实现各个方法之间的解耦等,由于JS中的继承是用原型链继承的,所以原型模式是用原型实例指向创建对象的类,使用于创建新的对象的类共享原型对象的属性以及方法案例比如我们现在需要实现一个页面上的轮播图,可能需要用到对轮播
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008