canvas 轮廓路径提取效果

前言

微信公众号:前端不只是切图

轮廓

对内容做border效果,可以先看下代码运行的效果

alt

内容是黑线构成的五角星,其轮廓就是红线的部分,本文主要介绍如何在canvas中实现这种效果

Marching Square

这里运用到的是marching square算法,直译过来就是行进的方格,这里的方格相当于canvas上的像素和他的上、左、上左的像素形成的区域,贴一张网上找到的图,很形象直观的表达了这个算法

alt
找到一个起始点

算法的整体过程为,首先我们要找到一个起始点,可以通过从左到右,从上到下遍历canvasimageData,找到第一个alpha不为0的像素作为起始点,然后开始行进

开始行进

所谓行进就是对(x,y)坐标+1-1操作,该如何行进,上图给出了16种状态,每种状态右下角的点就是当前准备行进的点,我们看上图的第一张像素图,红框中像素内容是白黑白黑对应第9种状态,所以要往下行进,则x不变,y+1,变成第二张像素图,然后继续判断,发现当前状态是白黑白白对应第5种状态向右行进,所以x+1y不变,之后不断往后,直到出现第16种状态即全是黑的或者当前行进的像素坐标和起始像素坐标一致,就说明边缘提取结束

优化

上面图其实就黑和白两种状态,代表是内容是否是完全透明的,可以通过二进制的方式优化状态比较的过程,比如第一个白白白白,对应0000,第二个黑黑白白对应1100,即当行进点获取四周的状态时可以通过左移的方式得到当前方格的二进制

绘制

我们可以把上面提取的点存到一个数组中,通过ctx.move()的方式将路径绘制到canvas

效果展示时间

为了让效果更加酷炫点,简单的用鼠标实现画笔功能,并且边框用虚线,点击绘制轮廓的同时把原内容隐藏,这里贴的是gif,加载可能比较慢可能要稍微等一下

alt

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/212712.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Gradio库的安装和使用教程

目录 一、Gradio库的安装 二、Gradio的使用 1、导入Gradio库 2、创建Gradio接口 3、添加接口到Gradio应用 4、处理用户输入和模型输出 5、关闭Gradio应用界面 三、Gradio的高级用法 1、多语言支持 2、自定义输入和输出格式 3、模型版本控制 4、集成第三方库和API …

边缘与云或边缘加云:前进的方向是什么?

边缘计算使数据处理更接近数据源,以及由此产生的行动或决策的对象。通过设计,它可以改变数十亿物联网和其他设备存储、处理、分析和通信数据的方式。 边缘计算使数据处理更接近数据源,以及由此产生的行动或决策的对象。这与传统的体系结构形成…

L1-016:查验身份证

题目描述 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2&#xf…

站群优化工具,站群优化方案策略

站群优化,作为网络推广的一项重要策略,站群的构建和优化对于提升网站在搜索引擎中的排名、吸引目标流量、增加用户粘性等方面有着不可忽视的作用。 站群优化方案 站群优化并非简单的堆积大量网站,更要注重质量和策略。在构建站群时&#xff…

VMware下载安装教程

目录 一.下载二.安装 一.下载 官网地址:官网 下载的时候选择Workstation Player,这个是免费的,当然你也可以选择下载Workstation Pro。 二.安装 下载完成之后点击安装包按照需要安装即可。 安装之后启动,可以看到这个能够免费使…

CPU标高load标高;linux故障日志排查

一般情况下,服务器不太会出问题。但是遇到特别诡异的情况,多半是服务器本身的问题。遇到问题,我们不能一味的去排查应用,中间件。更应该想到服务器的问题。否则很容易出现南辕北辙的情况。 这次分享的是一次服务器故障&#xff0c…

【小沐学Python】Python实现Web服务器(Flask+celery,生产者-消费者)

文章目录 1、简介2、安装和下载2.1 flask2.2 celery2.3 redis 3、功能开发3.1 创建异步任务的方法3.1.1 使用默认的参数3.1.2 指定相关参数3.1.3 自定义Task基类 3.2 调用异步任务的方法3.2.1 app.send_task3.2.2 Task.delay3.2.3 Task.apply_async 3.3 获取任务结果和状态 4、…

Java LeetCode篇-深入了解关于栈的经典解法(栈实现:中缀表达式转后缀)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 中缀表达式转后缀说明 1.1 实现中缀表达式转后缀思路 2.0 逆波兰表达式求值 2.1 实现逆波兰表达式求值思路 3.0 有效的括号 3.1 实现有效的括号思路 4.0 栈的压…

一文读懂MongoDB的全部知识点(1),惊呆面试官。

文章目录 01、mongodb是什么?02、mongodb有哪些特点?03、你说的NoSQL数据库是什么意思?NoSQL与RDBMS直接有什么区别?为什么要使用和不使用NoSQL数据库?说一说NoSQL数据库的几个优点?04、NoSQL数据库有哪些类型?05、M…

SmartSoftHelp8,端口安全进程查看管理工具

PID 协议 端口 所属进程名 本地绑定地址 远程地址 当前状态 关闭进程 下载地址: https://pan.baidu.com/s/1zBgeYsqWnSlNgiKPR2lUYg?pwd8888

ctfhub技能树_web_web前置技能_HTTP

目录 一、HTTP协议 1.1、请求方式 1.2、302跳转 1.3、Cookie 1.4、基础认证 1.5、响应包源代码 一、HTTP协议 1.1、请求方式 注:HTTP协议中定义了八种请求方法。这八种都有:1、OPTIONS :返回服务器针对特定资源所支持的HTTP请求方法…

微服务的流量管理-服务网格

对于单体应用来说,一般只有流入和流出两种流量。而微服务架构引入了跨进程的网络通信,流量发生在服务之间。由许多服务组成了复杂的网络拓扑结构,每次请求都会产生流量。 这些流量如果没有妥善的管理,整个应用的行为和状态将会不…

Linux安装nginx超完整步骤

1、到官网(http://nginx.org)下载nginx包,推荐使用稳定版本 2、上传nginx到linux系统,我上传的默认路径在/usr/local/下 3、安装依赖环境: ①安装gcc环境 yum install gcc-c ②安装PCRE库,用于解析正则表达式 yum…

轻易云AI:引领企业数智化转型提升企业AI效率

近期,轻易云AI与汤臣倍健的合作引起了业界的广泛关注。通过这一合作,轻易云AI不仅成功打造了集团小汤AI助手这一标志性的企业智能助手,更重要的是,这一合作凸显了轻易云AI作为专业AI应用集成专家的核心能力。轻易云AI已成功集成了…

数据结构算法-冒泡排序算法

引言 虽然选择排序好用 ,但有点问题 也就是频繁找最大值下标 放到 未排序的后面 因为每次需要扫描整个未排序序列,找到最大值或最小值的下标,并将其交换到未排序序列的最后一个位置。这样做的问题在于,在后面的迭代中&#xff0c…

LinkWeChat,唯一以开源为核心的SCRM

LinkWeChat是国内首个基于企业微信的开源SCRM,在集成了企微强大的开放能力的基础上,进一步升级拓展灵活高效的客户运营能力及多元化精准营销能力,让客户与企业之间建立强链接,帮助企业提高客户运营效率,强化营销能力&a…

python 图书馆选座小程序源码

开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索房间,轮播图&#xff0…

三个写法统计整数前导0个数

从键盘输入一个整数(可能有前导0),编程统计其前导0个数,其法有三。 (笔记模板由python脚本于2023年12月03日 12:32:32创建,本篇笔记适合对python整型int和字符型str熟悉的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:http…

ftp的服务安装配置

安装 yum install -y vsftpd # 是否安装成功 rpm -qa | grep vsftpd # 是否开机启动 systemctl list-unit-files | grep vsftpd # 开机启动 systemctl enable vsftpd.service # ftp端口 netstat -antup | grep ftp # 状态 service vsftpd status service vsftpd start service…

使用drawio图表,在团队中,做计划,设计和跟踪项目

使用drawio图表,在团队中,做计划,设计和跟踪项目 drawio是一款强大的图表绘制软件,支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用,则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部…