比如这张图片,我要获取这张图片的蓝色矩形的4个点的坐标,通过js的方式我该如何获取到?
恳请各位前辈指点迷津。
直接上代码
获取图片的绝对对坐标位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
.wrap{
width:300px;
height: 200px;
background: #ccc;
position: relative;
}
.ball{
width:20px;
height: 20px;
background: red;
border-radius: 50%;
position: absolute;
}
.box {
width: 400px;
height: 400px;
overflow: auto;
}
</style>
</head>
<body>
<div class="box">
<div class="wrap">
<img src="data:images/test.jpg" alt="">
<div class="container"></div>
</div>
</div>
<script src="js/jquery-2.1.3.min.js"></script>
<script type="text/javascript">
$('.wrap').click(function(e){
var radius=10;//半径
var offset=$(this).offset();
var top=e.pageY-offset.top-radius+"px";
var left=e.pageX-offset.left-radius+"px";
//$('.wrap').append('<div class="ball" style="top:'+top+';left:'+left+'"></div>');
$('.container').html('<div class="ball" style="top:'+top+';left:'+left+'"></div>');
alert(top+"_"+left);
})
</script>
</body>
</html>
// 获取元素的绝对位置坐标(像对于页面左上角)
function getElementPagePosition(element){
//计算x坐标
var actualLeft = element.offsetLeft;
var current = element.offsetParent;
while (current !== null){
actualLeft += current.offsetLeft;
current = current.offsetParent;
}
//计算y坐标
var actualTop = element.offsetTop;
var current = element.offsetParent;
while (current !== null){
actualTop += (current.offsetTop+current.clientTop);
current = current.offsetParent;
}
//返回结果
return {x: actualLeft, y: actualTop}
}
// 获取元素的绝对位置坐标(像对于浏览器视区左上角)
function getElementViewPosition(element){
//计算x坐标
var actualLeft = element.offsetLeft;
var current = element.offsetParent;
while (current !== null){
actualLeft += (current.offsetLeft+current.clientLeft);
current = current.offsetParent;
}
if (document.compatMode == "BackCompat"){
var elementScrollLeft=document.body.scrollLeft;
} else {
var elementScrollLeft=document.documentElement.scrollLeft;
}
var left = actualLeft - elementScrollLeft;
//计算y坐标
var actualTop = element.offsetTop;
var current = element.offsetParent;
while (current !== null){
actualTop += (current.offsetTop+current.clientTop);
current = current.offsetParent;
}
if (document.compatMode == "BackCompat"){
var elementScrollTop=document.body.scrollTop;
} else {
var elementScrollTop=document.documentElement.scrollTop;
}
var right = actualTop-elementScrollTop;
//返回结果
return {x: left, y: right}
}
var element = document.getElementById('rect');
console.log("绝对位置:", getElementPagePosition(element));
console.log("相对位置:", getElementViewPosition(element));
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
2021/8/17
我重新写了个demo
图片还得需要原图,这里的红色为
rgb(255,38,0)
2021/8/16
我能想到的就是
canvas
的getImageData
了,你可以参考这个前端扣背景
思路就是你拿到整张图片的rgba色值,再去获取蓝色的或者特定颜色的色值的点位数组,再处理下这个数组就可以大致能到了
粗略的写了个提取蓝色的demo
这个是获取点位的思路供你参考
最后效果图(红色钉子就是相对于图片的坐标),可能需要进行微调了,或者约定框线颜色。
我只能说我尽力了。或者你可以借助
opencv
之类的试试