Html5画布文本交叉点

2024-02-17

我有一些话。所有话都在某个“物体”之王中。这些单词可以在画布上移动,我需要获取所有交叉点的数组,如本例所示,但不需要将文本转换为 SVG。 paperjs.org/examples/path-intersections 谢谢。


您可以通过比较两个单词的 imageData 来检测两个单词之间的所有交点。

无论单词在何处相交,该像素处两个世界的 alpha 值都将大于零。

这是代码和小提琴:http://jsfiddle.net/m1erickson/ecAvt/ http://jsfiddle.net/m1erickson/ecAvt/

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>

<style>
    body{ background-color: ivory; padding:20px; }
    #wrapper{
        position:relative;
        width:400px;
        height:400px;
    }
    #canvasTop,#canvasBottom,#canvasDots{
        position:absolute; top:0px; left:0px;
        border:1px solid green;
        width:100%;
        height:100%;
    }
    #canvasTop{
        border:1px solid red;
    }
    #canvasDots{
        border:1px solid blue;
    }
</style>

<script>
$(function(){

    var canvas=document.getElementById("canvasTop");
    var ctx=canvas.getContext("2d");
    ctx.font="192px verdana";
    ctx.strokeText("No",40,220);

    var canvas2=document.getElementById("canvasBottom");
    var ctx2=canvas2.getContext("2d");
    ctx2.font="192px verdana";
    ctx2.strokeStyle="lightgray";
    ctx2.strokeText("Yes",40,300);

    var canvas3=document.getElementById("canvasDots");
    var ctx3=canvas3.getContext("2d");
    ctx3.fillStyle="blue";

    var canvasOffset=$("#canvasTop").offset();
    var offsetX=canvasOffset.left;
    var offsetY=canvasOffset.top;

    var startX;
    var startY;
    var isDown=false;



    var imageData2=ctx2.getImageData(0,0,canvas2.width,canvas2.height);
    var data2=imageData2.data;

    var dotsVisible=false;

    function showIntersections(){

        var imageData=ctx.getImageData(0,0,canvas.width,canvas.height);
        var data=imageData.data;

        ctx3.clearRect(0,0,canvas.width,canvas.height);
        for(var i=0;i<data.length;i+=4){
            if(data[i+3]>120 && data2[i+3]>120){
                var y=parseInt(i/canvas.width/4);
                var x=i/4-y*canvas.width;
                ctx3.beginPath();
                ctx3.arc(x,y,3,0,Math.PI*2);
                ctx3.closePath();
                ctx3.fill();
            }
        }
        dotsVisible=true;
    }

    function handleMouseDown(e){
      mouseX=parseInt(e.clientX-offsetX);
      mouseY=parseInt(e.clientY-offsetY);
      showIntersections();

    }

    function handleMouseUp(e){
      isDown=false;
    }

    function handleMouseOut(e){
      isDown=false;
    }

    function handleMouseMove(e){
      if(dotsVisible){ctx3.clearRect(0,0,canvas.width,canvas.height);}
      mouseX=parseInt(e.clientX-offsetX);
      mouseY=parseInt(e.clientY-offsetY);
      ctx.clearRect(0,0,canvas.width,canvas.height);
      ctx.strokeText("No",mouseX,mouseY+100);

    }

    $("#canvasDots").mousedown(function(e){handleMouseDown(e);});
    $("#canvasDots").mousemove(function(e){handleMouseMove(e);});
    $("#canvasDots").mouseup(function(e){handleMouseUp(e);});
    $("#canvasDots").mouseout(function(e){handleMouseOut(e);});

}); // end $(function(){});
</script>

</head>

<body>
    <h3>Move "NO" with mouse</h3>
    <h3>Click to find intersections</h3>
    <div id="wrapper">
        <canvas id="canvasBottom" width=400 height=400></canvas>
        <canvas id="canvasTop" width=400 height=400></canvas>
        <canvas id="canvasDots" width=400 height=400></canvas>
    </div>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Html5画布文本交叉点 的相关文章

随机推荐

  • Sublime Text 3 中包的语法高亮 (.tmLanguage)

    我正在研究这个plugin https github com andriyko sublime robot framework assistant 使用包控制安装插件时 语法突出显示不适用于 Sublime Text 3 Error loa
  • WPF 的自定义复选框样式

    我想将 wpf 默认复选框设置为自定义的外观 由于开始一个全新的控件并没有真正的意义 因此我想覆盖复选框的 Bulletchrome 子组件的 Windows Chrome 模板绑定 但是 我不能像使用复选框那样做到这一点 尝试使用类似的东
  • 如何使用 Android 的 ListView 在 React Native 中实现上拉加载更多内容?

    这就像下拉刷新的相反操作 Android 上的 ListView 不支持弹跳 实现无限滚动ListView您可以使用onEndReached and renderFooter from ListView成分 它可能看起来像这样 你只需ren
  • 立即绘制和 Matplotlib

    我目前正在开展一个项目 该项目涉及获取模拟读数并将其实时映射到图表上 因此 为了完成此任务 我通过 Arduino 模拟端口运行光敏电阻 并通过 python 3 4 3 读取该数据 在Python方面 我安装了maplotlib和draw
  • 使用 sendKeys() 在 Selenium 中上传文件不起作用

    我无法使用上传文件sendKeys 这是我的代码 driver findElement By xpath Locators browseFlagIconBtn sendKeys D Images icons png 我有一个用于文件上传的文
  • Spring 和 Hibernate 的正确版本以及所需的依赖项...由于依赖项而出现异常

    三天以来 我一直在尝试运行我的 Spring Hibernate 程序 由于 hibernate2 和 hibernate3 之间的版本差异 我很难找到所涉及的依赖项 最后我能够运行具有以下依赖项的程序 cglib nodep 2 1 3
  • Jupyter Notebook 中的感叹号和问号是什么意思?

    下列词语的含义是什么 尤其是 and 在以下示例中 与查询 Pandas DataFrame 中的数据相关 感叹号 cat olympics csv 问号 df fillna import pandas as pd pd Series co
  • 使用 Google Analytics Export API 获取网站趋势

    我正在开发一个使用 Google Analytics Export API 的应用程序 我正在尝试获取 Google 针对您的每个网站帐户显示的 趋势 结果 百分比 即上涨 35 04 或下跌 16 02 他们如何 在哪里获得这个数字以及它
  • 使用 SecItemImport 导入 PKCS12

    Apple s 文档 https developer apple com library mac documentation security Reference keychainservices Reference reference h
  • Plotly-Dash:如何确定客户端回调中的触发输入

    Dash 的文档描述了在服务器端回调的情况下如何确定哪个输入触发了回调 高级回调 https dash plotly com advanced callbacks 有没有办法确定哪个输入触发了客户端打回来 看起来这个功能是在1 13 0版本
  • REST - 修改部分资源 - PUT 或 POST

    我看到很多关于如何使用 REST 只更新部分资源 例如状态指示器 的问题 选项似乎是 抱怨 HTTP 没有 PATCH 或 MODIFY 命令 然而 接受的答案REST 的 HTTP MODIFY 动词 https stackoverflo
  • 获取当前行的长度

    我正在尝试在状态行中添加一个指示符来显示行的总长度 不仅仅是光标列位置 可以用 c 我该怎么做呢 要将一行内容作为字符串获取 请使用getline
  • 抓取无限滚动页面停止而不滚动

    我目前正在使用 PhantomJS 和 CasperJS 来抓取网站中的链接 该网站使用 JavaScript 动态加载结果 然而 下面的代码片段并没有让我获得页面包含的所有结果 我需要的是向下滚动到页面底部 查看微调器是否显示 意味着还有
  • 一次从单个设备登录,注销其他 MERN、JWT、Google 登录

    我无法理解应该如何防止同一用户多次登录 我在带有 JWT 令牌的 React Node 应用程序中使用带有 firebase 的 google 登录 如果从其他浏览器或其他设备登录 如何使用户注销 有没有任何库可以处理这个问题或者有什么方法
  • 如何在同一个库中拥有多个wpf自定义控件?

    我有一个 WPF 自定义控件项目 我想在其中包含许多自定义控件 默认情况下 VS2015 cummunity 创建一个 Theme 文件夹 其中包含 generic xaml 文件和包含交互逻辑的 cs 文件 我想要有很多用户控件 所以我尝
  • 从外部站点动态加载 js

    我想当用户单击按钮时从外部站点加载 JS 代码 例如
  • 如何在 ngTagsInput 中设置标签的颜色?

    我想在我的项目中使用 ng tags input 我尝试根据数组中的颜色属性对象为每个标签设置不同的颜色 Here is plunker http plnkr co edit W5bjrwN5riL94i2jhOP3 p preview我正
  • 反转字符串中元素的顺序

    我有以下字符串 1119 2 483 11021 我想反转该字符串中元素的顺序 期望的输出 11021 483 2 1119 T SQL 版本 2014 您需要一个有序的 split 函数 例如 灵感 https www sqlserver
  • 线程如何节省时间?

    我正在学习 C 中的线程 但是 我无法理解线程的哪些方面实际上提高了性能 考虑仅存在一个核心处理器的场景 将任务拆分为多个线程使用相同的进程上下文 共享资源 并且它们同时运行 由于线程只是共享时间 为什么它们的运行时间 周转时间 小于单线程
  • Html5画布文本交叉点

    我有一些话 所有话都在某个 物体 之王中 这些单词可以在画布上移动 我需要获取所有交叉点的数组 如本例所示 但不需要将文本转换为 SVG paperjs org examples path intersections 谢谢 您可以通过比较两