2024-04-16 17:02:07
在JS中实现图片镜像翻转可通过Canvas和CSS两种方式完成,支持水平、垂直及同时翻转三种效果,并需注意跨域处理与性能优化。以下是具体实现方法:
一、Canvas实现镜像翻转Canvas通过缩放(scale())和原点平移(translate())实现翻转,核心逻辑是调整坐标系方向并修正绘制位置。
水平镜像翻转调用ctx.scale(-1, 1)水平翻转坐标系,再通过ctx.translate(-image.width, 0)将原点移至右侧,确保图像正确显示。
function horizontalFlip(image, canvas) { const ctx = canvas.getContext('2d'); canvas.width = image.width; canvas.height = image.height; ctx.scale(-1, 1); // 水平翻转 ctx.translate(-image.width, 0); // 原点移至右侧 ctx.drawImage(image, 0, 0);}垂直镜像翻转使用ctx.scale(1, -1)垂直翻转坐标系,配合ctx.translate(0, -image.height)将原点移至下方。
function verticalFlip(image, canvas) { const ctx = canvas.getContext('2d'); canvas.width = image.width; canvas.height = image.height; ctx.scale(1, -1); // 垂直翻转 ctx.translate(0, -image.height); // 原点移至下方 ctx.drawImage(image, 0, 0);}水平垂直同时翻转设置ctx.scale(-1, -1)同时翻转坐标系,并通过ctx.translate(-image.width, -image.height)将原点移至右下角。
function bothFlip(image, canvas) { const ctx = canvas.getContext('2d'); canvas.width = image.width; canvas.height = image.height; ctx.scale(-1, -1); // 同时翻转 ctx.translate(-image.width, -image.height); // 原点移至右下角 ctx.drawImage(image, 0, 0);}通过transform属性直接修改元素样式,支持动态切换翻转效果。
HTML结构
<img id="myImage" src="your-image.jpg" alt="Original Image">CSS样式
#myImage.horizontal-flip { transform: scaleX(-1); /* 水平翻转 */}#myImage.vertical-flip { transform: scaleY(-1); /* 垂直翻转 */}#myImage.both-flip { transform: scaleX(-1) scaleY(-1); /* 同时翻转 */}JS控制通过添加/移除CSS类实现动态翻转:
const img = document.getElementById('myImage');img.classList.add('horizontal-flip'); // 添加水平翻转img.classList.remove('vertical-flip'); // 移除垂直翻转若图片来自不同域名,需配置CORS(跨域资源共享)以避免Canvas污染错误。
服务器配置在响应头中添加Access-Control-Allow-Origin,允许所有域名或指定域名:
Access-Control-Allow-Origin: *或Access-Control-Allow-Origin: your-domain.com客户端配置设置img.crossOrigin = "anonymous",确保浏览器发送跨域请求:
const img = new Image();img.crossOrigin = "anonymous"; // 关键设置img.src = '应用场景
图像编辑工具:调整图片方向。
游戏开发:对称地图或角色动画复用。
数据增强:机器学习训练数据多样性提升。
用户头像:方向微调。
视频编辑:画面方向调整或特效创建。
性能优化
避免重复绘制:缓存翻转后的图像。
使用离屏Canvas:减少屏幕重绘次数。
合理使用requestAnimationFrame:控制实时翻转频率。
优化图像资源:压缩图片以加快加载速度。
硬件加速:启用GPU加速提升绘制性能。
除镜像翻转外,Canvas还支持以下变换:
