js如何知道图片中某些点的坐标?

张巨侠
  • 379

image.png
比如这张图片,我要获取这张图片的蓝色矩形的4个点的坐标,通过js的方式我该如何获取到?
恳请各位前辈指点迷津。

回复
阅读 2.7k
3 个回答
JenK
  • 10.3k

2021/8/17
我重新写了个demo
图片还得需要原图,这里的红色为rgb(255,38,0)
image.png


2021/8/16

我能想到的就是canvasgetImageData 了,
你可以参考这个前端扣背景
思路就是你拿到整张图片的rgba色值,再去获取蓝色的或者特定颜色的色值的点位数组,再处理下这个数组就可以大致能到了
粗略的写了个提取蓝色的demo
image.png
这个是获取点位的思路供你参考
image.png
image.png


最后效果图(红色钉子就是相对于图片的坐标),可能需要进行微调了,或者约定框线颜色。
我只能说我尽力了。或者你可以借助opencv之类的试试

image.png

AIger
  • 83

直接上代码
获取图片的绝对对坐标位置

<!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));

我咋感觉前端实现不了啊

宣传栏