canvas实现图像放大镜
发布时间 - 2026-01-10 22:53:23 点击率:次本文实例为大家分享了canvas实现图像放大镜的具体代码,供大家参考,具体内容如下
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>canvas-放大镜</title>
<style>
body{
padding: 0px;
margin: 0px;
}
#canvas{
border: 1px solid red;
margin: 100px;
}
</style>
</head>
<body>
<canvas id="canvas" width="800px" height="500px">
</canvas>
<script>
//获取到canvas元素
var canvas = document.getElementById('canvas');
//获取canvas中的画图环境
var context = canvas.getContext('2d');
var img = new Image();
img.src = "./image/liuyifei.jpg";
window.onload = function(){
//获取放大镜
getfangdajing(context,canvas,img,150,2);
}
/*
* context:绘制环境对象,
* element:canvas元素对象
* img:图片对象
* diameter:放大镜的大小,
* ratio:图形的放大比例,
* (比例 = 原图 :镜中图像)0<ratio<1缩小图像,ratio>1放大图像
* */
function getfangdajing(context,element,img,diameter,ratio){
//绘制图片
context.drawImage(img,0,0,element.width,element.height);
//鼠标在element中移动触发事件
element.onmousemove = function (e){
context.clearRect(0,0,element.width,element.height);
//绘制图片
context.drawImage(img,0,0,element.width,element.height);
//解决浏览器兼容问题
var e = e ? e : window.event;
//获取鼠标在element元素中的坐标值
var cxy = windowToCanvas(element,e.clientX,e.clientY);
context.save();//保存当前绘制环境
//获取放大镜
getClip(context,cxy.x,cxy.y,diameter/2);
//将内容放入到放大镜中显示
//根据鼠标点的坐标值计算出在原图的坐标值
var ytx0=img.width/element.width*cxy.x;//计算出鼠标在原图的X坐标值
var yty0=img.height/element.height*cxy.y//计算出鼠标在原图的Y坐标值
//(原图形/显示图形比例)* (放大镜直径/比例= 镜中的图形所占大小)= 原图要截取的图像大小
var ytclipValueW = img.width/element.width*diameter/ratio;//在原图截取图片的宽度
var ytclipValueH = img.height/element.height*diameter/ratio;//在原图截取图片的宽度
//.drawImage(图像对象,原图像截取的起始X坐标,原图像截取的起始Y坐标,原图像截取的宽度,原图像截取的高度,
// 绘制图像的起始X坐标,绘制图像的起始Y坐标,绘制图像所需要的宽度,绘制图像所需要的高度);
context.drawImage(img,ytx0-ytclipValueW/2,yty0-ytclipValueH/2,ytclipValueW,ytclipValueH,cxy.x-diameter/2,cxy.y-diameter/2,diameter,diameter);
context.restore();//恢复当前保存的绘制环境
}
}
/*
* 获取放大镜框:进行图层切割
* context:绘制环境对象
* x:鼠标在画布中的X坐标
* y:鼠标在画布中的Y坐标
* r:放大镜的直径
* */
function getClip(context,x,y,r){
context.beginPath();
context.arc(x,y,r,0,Math.PI*2,false);
context.stroke();
context.clip();//沿形状切除向外的图层
}
/*
* 坐标转换:将window中的坐标转换到元素盒子中的坐标,并返回(x,y)坐标
* element:canvas元素对象
* x:鼠标在当前窗口X坐标值
* y:鼠标在当前窗口Y坐标值
* */
function windowToCanvas(element,x,y){
//获取当前鼠标在window中的坐标值
// alert(event.clientX+"-------"+event.clientY);
//获取元素的坐标属性
var box = element.getBoundingClientRect();
var bx = x - box.left;
var by = y - box.top;
return {x:bx,y:by};
}
</script>
</body>
</html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# canvas放大镜
# canvas图像放大镜
# js放大镜
# 使用canvas进行图像编辑的实例
# canvas实现图像布局填充功能
# canvas实现图像截取功能
# PHP实现将HTML5中Canvas图像保存到服务器的方法
# Android开发之图形图像与动画(一)Paint和Canvas类学习
# js canvas实现简单的图像扩散效果
# 鼠标
# 坐标值
# 镜中
# 所需要
# 图层
# 计算出
# 向外
# 大家分享
# 所占
# 具体内容
# 出在
# 大家多多
# 中移动
# getContext
# img
# id
# solid
# Image
# border
# red
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
如何在建站宝盒中设置产品搜索功能?
Bootstrap整体框架之CSS12栅格系统
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
linux写shell需要注意的问题(必看)
b2c电商网站制作流程,b2c水平综合的电商平台?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
如何快速生成橙子建站落地页链接?
详解jQuery中基本的动画方法
在Oracle关闭情况下如何修改spfile的参数
linux top下的 minerd 木马清除方法
,怎么在广州志愿者网站注册?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
英语简历制作免费网站推荐,如何将简历翻译成英文?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
javascript读取文本节点方法小结
如何在万网ECS上快速搭建专属网站?
JS实现鼠标移上去显示图片或微信二维码
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
企业网站制作这些问题要关注
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Python文件流缓冲机制_IO性能解析【教程】
高端建站如何打造兼具美学与转化的品牌官网?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
敲碗10年!Mac系列传将迎来「触控与联网」双革新
如何在宝塔面板中修改默认建站目录?
Laravel如何升级到最新版本?(升级指南和步骤)
Android利用动画实现背景逐渐变暗
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
JS经典正则表达式笔试题汇总
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
高性能网站服务器配置指南:安全稳定与高效建站核心方案
javascript中对象的定义、使用以及对象和原型链操作小结
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Android使用GridView实现日历的简单功能
如何用wdcp快速搭建高效网站?
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
Laravel如何处理异常和错误?(Handler示例)
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
Java垃圾回收器的方法和原理总结

