JS实现图片旋转,前端实现图片旋转

文章介绍了如何使用JavaScript和HTML中的CanvasAPI实现图片的旋转功能,同时处理了跨域问题。通过`rotateImg`函数,用户可以点击按钮动态改变图片角度,并在`clickSubmit`时将处理后的base64图像发送到后台。
摘要由CSDN通过智能技术生成

非服务打开会有跨越问题

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>图片旋转</title>
	</head>

	<body>
		<button onclick="clickRotateImg()">旋转</button>
		<button onclick="clickSubmit()">提交</button>
		<img src="" id="img-box" crossorigin="anonymous"/>
	</body>
	<script>
		var temp_rotate = 0, temp_base64;
		
		/**
		 * 旋转图片
		 * @param src 图片路径
		 * @param rotate 旋转角度
		 * @returns {Promise<base64>}
		 */
		function rotateImg(src, rotate, callback) {
			var img = new Image();
			img.src = src;
			img.crossOrigin= 'anonymous';
			img.onload = function() {
				var canvas = document.createElement('canvas')
				var context = canvas.getContext('2d')
				if(rotate > 45 && rotate <= 135) { // 90 宽高颠倒
					canvas.width = img.height
					canvas.height = img.width
				} else if(rotate > 225 && rotate <= 315) { // 270 宽高颠倒
					canvas.width = img.height
					canvas.height = img.width
				} else {
					canvas.width = img.width
					canvas.height = img.height
				}
				context.clearRect(0, 0, canvas.width, canvas.height)
				context.translate(canvas.width / 2, canvas.height / 2)
				context.rotate(rotate * Math.PI / 180)
				context.translate(-canvas.width / 2, -canvas.height / 2)
				context.drawImage(img, canvas.width / 2 - img.width / 2, canvas.height / 2 - img.height / 2, img.width, img.height)
				context.translate(canvas.width / 2, canvas.height / 2)
				context.rotate(-rotate * Math.PI / 180)
				context.translate(-canvas.width / 2, -canvas.height / 2)
				context.restore()
				var base64 = canvas.toDataURL('image/png')
				callback(base64);
				temp_base64 = base64.replace('data:image/png;base64,', '');
			}
		}
		
		rotateImg("image/1.jpeg", temp_rotate, function(base64){
			document.getElementById('img-box').src = base64;
		});
		/**
		 * 点击-旋转图片
		 */
		function clickRotateImg(){
			if(temp_rotate >= 360){
				temp_rotate = 0;
			}
			temp_rotate = temp_rotate + 90;
			rotateImg("image/1.jpeg", temp_rotate, function(base64){
				document.getElementById('img-box').src = base64;
			});
		}
		
		/**
		 * 提交数据
		 */
		function clickSubmit(){
			console.log('后台base64转图片:', temp_base64);
		}
		
	</script>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值