本文实例为大家分享了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
相关文章:
如何快速生成凡客建站的专业级图册?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
简历在线制作网站免费版,如何创建个人简历?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
电商网站制作公司有哪些,1688网是什么意思?
C++时间戳转换成日期时间的步骤和示例代码
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何快速建站并高效导出源代码?
建站之星后台密码如何安全设置与找回?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
香港服务器租用每月最低只需15元?
建站之星后台密码遗忘如何找回?
定制建站流程解析:需求评估与SEO优化功能开发指南
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
Android使用GridView实现日历的简单功能
如何用低价快速搭建高质量网站?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
建站之星安装后如何自定义网站颜色与字体?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
如何在建站宝盒中设置产品搜索功能?
制作网站的基本流程,设计网站的软件是什么?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
香港服务器部署网站为何提示未备案?
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何高效配置IIS服务器搭建网站?
如何在阿里云虚拟服务器快速搭建网站?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
如何高效生成建站之星成品网站源码?
网站制作说明怎么写,简述网页设计的流程并说明原因?
C#怎么创建控制台应用 C# Console App项目创建方法
建站与域名管理如何高效结合?
如何通过虚拟主机快速完成网站搭建?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
宝塔新建站点报错如何解决?
如何高效利用200m空间完成建站?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何在万网自助建站中设置域名及备案?
制作网站的软件免费下载,免费制作app哪个平台好?
建站之星2.7模板:企业网站建设与h5定制设计专题
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何在Windows环境下新建FTP站点并设置权限?
建站主机SSH密钥生成步骤及常见问题解答?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
学校建站服务器如何选型才能满足性能需求?
*请认真填写需求信息,我们会在24小时内与您取得联系。