用JS怎么实现点击上传的图片可以旋转的功能
Admin 2022-06-23 群英技术资讯 1748 次浏览
本篇内容介绍了“用JS怎么实现点击上传的图片可以旋转的功能”的有关知识,在实际项目的操作过程或是学习过程中,不少人都会遇到这样的问题,接下来就让小编带大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!最近在做一个有关人脸采集的项目,然后在编写前端模块时,遇到了一个问题,就是当客户上传照片或直接拍照上传时,会遇到有些图片可能会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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章我们来了解JavaScript迭代器相关内容,下文将介绍什么是迭代器,以及自定义迭代器的方法,文中示例代码介绍的非常详细,对大家学习和理解JavaScript迭代器会有一定的帮助,那么感兴趣的朋友接下来一起跟随小编了解看看吧。
怎么使用Node.js搭建一个静态Web服务器?下面本篇文章就手把手教大家使用Node.js搭建静态Web服务器的方法,希望对大家有所帮助!
怎样用jQuery写一个用户注册的表单验证?在实际的项目中,我们常常会遇到用户注册页面的实现需求,因此下面就尝试用用jQuery写一个用户注册的表单验证,感兴趣的朋友可以参考,具体内容如下
这篇文章主要为大家介绍了VSCode使React Vue代码调试变得更爽的使用方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
本文实例为大家分享了js+css实现卡片轮播图效果的具体代码,供大家参考,具体内容如下实现点击的时候切换卡片,自动轮播,鼠标移入暂停,移出继续轮播,有动画事件。效果如下。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008