HTML5笔记总结(二)

UG476 GT Transceivers文档翻译和自身理解 对UG476 Xilinx官方文档进行翻译的基础上加上自己的理解 阅读详情

一、Canvas绘制图形

绘制路径
方法描述
fill()填充当前绘图(路径)
stroke()通过线条来绘制图形轮廓,不会自动调用classpath,绘制已定义的路径
beginPath()起始一条路径,或重置当前路径
moveTo()把路径移动到画布中的指定点,不创建线条
closePath()闭合路径之后图形绘制会重新回到起点,创建从当前点回到起始点的路径
lineTo()添加一个新点,创建从该点到最后指定点的线条
clip()从原始画布剪切任意形状和尺寸的区域
quadraticCurveTo()创建二次贝塞尔曲线
bezierCurveTo()创建三次方贝塞尔曲线
arc()创建弧/曲线(用于创建圆形或部分圆)
arcTo()创建两切线之间的弧/曲线
isPointInPath()如果指定的点位于当前路径中,返回布尔值
康康案例(一)绘制圆形

在这里插入图片描述

	/* 
         绘制圆形
         g.arc(x,y,r,startAngle,endAngle,anticlockwisc)
         startAngle:弧度开始    endAngle:弧度结束
         anticlockwisc:可选的,规定应该是逆时针还是顺时针绘图  
             默认false顺时针 true逆时针
     */
     //绘制顺时针圆弧
     g.fillStyle = "red";
     g.beginPath();
     g.arc(50,50,40,0,Math.PI*2);
     g.closePath();
     g.fill();
康康案例(二)

在这里插入图片描述

康康案例(三)绘制贝塞尔曲线
	<script type="text/javascript">
        var canvas = document.getElementById("mycanvas");
        //创建画笔
        var g = canvas.getContext("2d");
        /* 
            quadraticCurveTo绘制二次贝塞尔曲线
            quadraticCurveTo(cpx,cpy,x,y)
            (cpx,cpy)绘制点坐标
            (x,y)结束点的坐标
        */
        g.beginPath();
        g.moveTo(10,200);//起始点
        //绘制二次贝塞尔曲线
        g.quadraticCurveTo(40,100,200,200);
        g.stroke();

        g.beginPath();
        g.rect(10,200,10,10);//开始点
        g.rect(40,200,10,10);//控制点
        g.rect(200,200,10,10);//结束点
        g.fill();
        /* 
            创建三次贝塞尔曲线
            bezierCurveTo(cpx1,cpy1,cpx2,cpy2,x,y)
        */
        g.beginPath();
        g.moveTo(10.270);//起始点
        g.bezierCurveTo(300,305,310,340,200,270);
        g.stroke();
    </script>

二、绘制贝塞尔曲线

什么是贝塞尔曲线

贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。

一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。

贝塞尔曲线是计算机图形学中相当重要的参数曲线,在一些比较成熟的位图软件中也有贝塞尔曲线工具如PhotoShop等。在Flash4中还没有完整的曲线工具,而在Flash5里面已经提供出贝塞尔曲线工具。

贝塞尔曲线于1962,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由Paul de Casteljau于1959年运用de Casteljau演算法开发,以稳定数值的方法求出贝兹曲线。

一次贝塞尔曲线(线性贝塞尔曲线)

一次贝塞尔曲线其实是一条直线。在这里插入图片描述

二次贝塞尔线

在这里插入图片描述
在这里插入图片描述

三次贝塞尔线

在这里插入图片描述
在这里插入图片描述

<script type="text/javascript">
        var canvas = document.getElementById("mycanvas");
        //创建画笔
        var g = canvas.getContext("2d");
        /* 
            quadraticCurveTo绘制二次贝塞尔曲线
            quadraticCurveTo(cpx,cpy,x,y)
            (cpx,cpy)绘制点坐标
            (x,y)结束点的坐标
        */
        g.beginPath();
        g.moveTo(10,200);//起始点
        //绘制二次贝塞尔曲线
        g.quadraticCurveTo(40,100,200,200);
        g.stroke();

        g.beginPath();
        g.rect(10,200,10,10);//开始点
        g.rect(40,200,10,10);//控制点
        g.rect(200,200,10,10);//结束点
        g.fill();
        /* 
            创建三次贝塞尔曲线
            bezierCurveTo(cpx1,cpy1,cpx2,cpy2,x,y)
        */
        g.beginPath();
        g.moveTo(10.270);//起始点
        g.bezierCurveTo(300,305,310,340,200,270);
        g.stroke();
    </script>

三、绘制图形

1、lineCap 是 canvas 2D API,指定如何绘制每一条线段末端的属性

有3个可选值:
(1)butt: 线段某段以方形结束
(2)round: 线段末端以圆形结束
(3)square: 线段末端以方形结束,但是多出来一个宽度和线宽一样,高度是线段厚度一半的矩形区域,默认值就是butt;

在这里插入图片描述

var lineCaps =["butt","round","square"]
			
        for (var i = 0; i < 3; i++) {
                ctx.beginPath();
                ctx.moveTo(20 + 30 * i, 30)
                ctx.lineTo(20 + 30 * i, 100)
                ctx.lineWidth=20;
                ctx.lineCap =lineCaps[i]
                ctx.stroke()
            }
        // 绘制两端线段
        ctx.beginPath();
        ctx.moveTo(0,30);
        ctx.lineTo(300,30)
        
        ctx.moveTo(0,100);
        ctx.lineTo(300,100);
        
        ctx.lineWidth=1;
        ctx.strokeStyle='#FF1493'
        ctx.stroke()
2、lineJoin 在同一个path内,设定线条与线条间接合的样式

有三个可选值:
(1)round: 通过填充一个额外的,圆心在相连部分末端的扇形,绘制拐角的形状。圆角的半径就是线段的宽度
(2)**bevel:**在相连部分的末端填充一个额外的,以三角形为底的区域,每一个部分都有各自的矩形
(3)miter:(默认) 相连部分的额外边缘,相交于一点,形成一个额外的菱形区域
在这里插入图片描述

<script type="text/javascript">
        var canvas = document.getElementById("mycanvas");
        var g = canvas.getContext("2d");//绘制画笔
        var lineJoins = ["round","bevel","miter"];
        g.lineWidth = 20;
        //绘制W
        for (var i = 0; i < lineJoins.length; i++){
            g.lineJoin=	lineJoins[i]
            g.beginPath();
            g.moveTo(50,50 + i * 50)
            g.lineTo(100,100 + i * 50);
            g.lineTo(150,50  +  i * 50);
            g.lineTo(200,100 + i * 50);
            g.lineTo(250,50  +  i * 50);
            g.stroke()
        }
    </script>
3、setLineDash: 绘制虚线

// [实线长度,间隔长度]
ctx.setLineDash([20,5])

4、绘制文本

canvas提供了两种方法来绘制文本
1、ctx.fillText(tetx,x,y,maxwidth) 绘制填充文本
2、ctx.strokeText(tetx,x,y,maxwidth) 绘制轮廓文本
在这里插入图片描述

5、绘制图片:

canvas提供了一个方法:drawImage(img,x.y)
ctx.drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh)
img:图像源
sx,sy,sw,sh:源图像切片位置和大小
dx,dy,dw,dh:定义切片的目标显示位置和大小

四、save与restore

save(): 保存画布(canvas)的所有状态
restore(): 恢复画布(canvas)的所有状态

五、变 换 API

在这里插入图片描述
(一)translate和css3中的区别?
canvas的会进行累加,css3的不会; translate:移动的是原点

六、合成 API

合成: 在前面的所有例子中,我们总是将一个图形画在另一个之上,对于其他更多的情况,仅仅这样是远远不够的。比如,对合成的图形来说,绘制顺序会有限制。不过,我们可以利用
在这里插入图片描述

globalCompositeOperation 定义和用法

globalCompositeOperation 属性设置或返回如何将一个源(新的)图像绘制到目标的图像上

(一)源对象:
        source-over:默认值 在源图像上面,新的图层比较高
        source-in:是指留下源图像与目标图像重叠部分(相交部分)
        source-atop:砍掉目标溢出部分
        source-out:只留下源超过目标的部分
        顺序限制 只能放在图形绘制之前
        ctx.globalCompositeOperation = "source-out";
(二)目标:
        destination-over:目标在上面,旧的图层高
        destination-in:是指留下源图像与目标图像重叠部分(相交部分)
        destination-atop:砍掉目标溢出来的部分
        destination-out:留下目标超出的部分
   		globalAlpha透明度

案例—绘制月亮

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>canvas合成</title>
    <style type="text/css">
        *{margin: 0px;padding: 0px;}
        /* canvas的默认颜色不是白色,默认颜色是根页面颜色一样 */
        html,body{background-color: pink;}
        #mycanvas{background-color: black;position: absolute;top: 0;left: 0;right: 0;bottom: 0;margin: auto;}
    </style>
</head>
<body>
    <canvas id="mycanvas" width="400" height="400"></canvas>
    <script type="text/javascript">
        var canvas = document.getElementById("mycanvas");
        var ctx = canvas.getContext("2d");
        
        ctx.save();
        ctx.fillStyle="#fff";
        ctx.beginPath();
        ctx.arc(200,200,100,2*Math.PI,false);
        ctx.fill();

        ctx.save();
        ctx.beginPath();
        ctx.globalCompositeOperation = "destination-out"
        ctx.fillStyle = "red";
        ctx.arc(150,200,100,2*Math.PI,false);
        ctx.fill();
        ctx.restore();//释放
    </script>
</body>
</html>
Canvas动画
(一)动画的基本步骤

1、清空canvas再绘制每一帧动画之前,需要清空所有,清空所有最简单的做法是clearRect()方法
2. 保存 canvas 状态 如果在绘制的过程中会更改 canvas 的状态(颜色、移动了坐标原点等),又
在绘制每一帧时都是原始状态的话,则最好保存下 canvas 的状态
3. 绘制动画图形这一步才是真正的绘制动画帧
4. 恢复 canvas 状态如果你前面保存了 canvas 状态,则应该在绘制完成一帧之后恢复
canvas 状态。
绘制 – 清空 —绘制 —清空 。。。。。

控制动画

我们可用通过 canvas 的方法或者自定义的方法把图像会知道到 canvas 上。正常情况,我们能看到绘制的结果是在脚本执行结束之后。例如,我们不可能在一个 for 循环内部完成动画。
4. 也就是,为了执行动画,我们需要一些可以定时执行重绘的方法。
5. 一般用到下面三个方法:
setInterval()
setTimeout()
requestAnimationFrame()

YOLOv8-Pose 姿态识别 RK3588 实战:从模型训练到 RKNN 部署,精度与推理速度双提升 本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。 阅读详情

相关推荐

AVL_Cruise_interface\Simulink联合仿真

分享了AVL_Cruise通过interface模块与Simulink进行联合仿真的过程

qq_64735036的博客 2678

自定义View之Paint和Canvas常用方法一览

文章结构自定义View之Paint和Canvas常用方法一览`Paint` 画笔????️Paint常用操作速查表线条形状设置线头形状 : setStrokeCap()设置拐角形状 : setStrokeJoin()设置尖角补充延长线最大值 : setStrokeMiter()setShader() :ShadersetColorFilter() :ColorFiltersetXfermode() :X...

白泽的博客 908

告别夜间噪点!用瑞芯微RV1126B的AI-ISP,手把手教你打造0.01Lux超低光摄像头

本文详细介绍了如何利用瑞芯微RV1126B芯片的AI-ISP技术,打造0.01Lux超低光摄像头,解决夜间噪点问题。通过AI算法与图像信号处理的深度融合,RV1126B的3TOPS边缘算力实现了像素级AI降噪和语义感知增强,显著提升低光环境下的图像质量。文章包含硬件选型、软件配置和实战调优指南,助力开发者在AIoT领域实现高性能视觉应用。

weixin_33725722的博客 565

matplotlib.lines.Line2D

属性 描述 agg_filter a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array alpha float (0.0 transparent through 1.0 opaque) animated...

Claroja 4887

蓝桥杯算法:打印图形——六芒星

【输入格式】 输入一行包含一个整数 n。 【输出格式】 输出一个六芒星,表示满足题意的图形。 【样例输入】 3 4 【样例输出】 【评测用例规模与约定】 对于所有评测用例,1 ≤ n ≤ 20。 总结: 第一次做图形题,做了蛮久,图形题有很多的方式去完成,它考验的是你能不能找到更简单的那一种方式. 我初看到这个图形,第一种想法是把这个六芒星当做六个小三角形来做,然后以某种规则排列一下,就能做出来,但是尝试了一下感觉太麻烦了。 然后我的第二种想法是,这个图形是对称图形,怎么能写出一半吗? 这样另一半想办

KeepCodeing 3835

Pointnet++环境配置+复现

深度学习点云经典网络Pointnet++

weixin_58663121的博客 8075

html根据矩形确定四值坐标,熬夜总结了 “HTML5画布” 的知识点(共10条)

前言html5Canvas的知识点,是开发的必备技能,在实际工作中也常常会涉及到。最近熬夜总结html5Canvas相关的知识点,大家一起看一下吧:1.html5Canvas基础知识Canvas是什么?翻译过来是画布的意思Canvas元素用于在网页上绘制2D图形和图像Canvas使用的场景有:1,动画;2,H5游戏;3,图表。效果动画,加载Loading:H5游戏效果:对于Canvas需要掌握:使...

weixin_39611072的博客 573

STM32移植LVGL(LittleVGL)

**STM32移植LVGL(LittleVGL)**

qq_53000374的博客 1万+

android 2d绘图 效率,Android_2D绘图的学习Paint,Canvas(二)

前言上一节,学会了Paint,Canvas的基本用法后,这一节,学习Paint的高级用法。还没看过上一节的请点击这里:Android_2D绘图的学习Paint,Canvas(一)。一,文字的绘制在做UI的时候,常常会绘制文字,Canvas绘制文字时,主要考虑到字体的宽度和高度问题。字体的宽度比较好理解,这里我们主要考虑一下字体的高度。先看一张图,网上搜的: 这里说明了在安卓中绘制字体时对于高度的划...

weixin_39763683的博客 203

UE5垃圾回收优化实战:定位GC卡顿与内存泄漏

垃圾回收(GC)是Unreal Engine 5中保障UObject内存安全的核心机制,其基于引用图的标记-清除原理决定了性能高度依赖引用结构合理性。当GC频繁触发或单次耗时突增,往往映射出蓝图强引用冗余、C++根对象管理失控或资源生命周期设计缺陷等底层问题。技术价值在于降低主线程阻塞、稳定60帧体验、抑制内存异常增长;典型应用场景包括关卡切换卡顿、UI打开后持续GC、打包后内存不释放等。本文聚焦UE5特有的Full GC模式、UObject生命周期约束及GC触发时机不可见性,提供从蓝图变量规范、TSoft

weixin_31995251的博客 362

YOLOv8 改进涨点 | 模块即插即用 直接可用

在目标检测任务中,注意力机制能够帮助模型聚焦于图像中的关键区域,显著提升检测精度。。创建模块代码注册模块修改任务解析tasks.py创建YAML配置文件模块核心优势适用场景计算开销SOCA捕获二阶统计信息,增强通道间相关性需要精细特征区分的场景中等SK自适应多尺度核选择多尺度目标检测中等偏高显式特征聚集-分配机制全局上下文建模中等A2-Net双线性注意力,高效全局交互复杂场景理解中等偏高CrissCross线性复杂度全局上下文高分辨率输入,长距离依赖较低。

u012133341的博客 2257

three.js 源码注释(四十六)Material /LineBasicMaterial.js

LineBasicMaterial方法根据参数parameters创建线段的虚线线型材质,parameters参数的格式看上面.LineBasicMaterial对象的功能函数采用 定义构造的函数原型对象来实现.大部分属性方法继承自材质的基类Material.用材质来定义线性,第一次见,真的很有想象力.简直就是对绘图软件的终结. <summary>LineBasicMaterial</summary> <param name ="parameters" type="String">string类型的JS

omni360的专栏 2880

基于物联网设计的蜂箱智能监测系统设计

为解决传统养蜂业依赖人工、管理效率低下、干扰蜂群等问题,本项目设计并实现了一套基于物联网(IoT)的蜂箱智能监测系统。

685

HTML5冲浪笔记(二)

1.HTML5提高 HTML5的新增特性主要是针对于以前的不足,增加了一些新的标签,新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本都是IE9+以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性 1.新增语义化标签 < header > :头部标签 < nav >: 导航标签 < article >: 内容标签 < section >:定义文档某个区域 < aside >:侧边栏标签 < footer &g

Augenstern_QXL的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

HTML5学习,笔记二

HTML5学习,笔记二 文章目录HTML5学习,笔记二1.表格标签1.1表格标签的主要作用1.2表格的基本语法1.3 表头单元格标签1.4表格属性1.5表格结构标签1.6合并单元格2.列表标签2.1无序列表2.2有序列表2.3自定义列表3.表单标签3.1 为什么需要表单3.2 表单的组成3.3 表单域3.3 表单域3.4 表单控件(表单元素)3.4.1 表单元素3.4.2 `` 标签3.4.3 `` 表单元素3.4.4 `` 表单元素 1.表格标签 1.1表格标签的主要作用 表格主要用于显示、展示数据,因

一个卑微的程序员 640

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Html5——笔记二

文章目录学习网址笔记HTML 样式- CSSHTML 图像HTML 表格HTML 区块 学习网址 https://www.w3school.com.cn/html5/html_5_audio.asp https://www.runoob.com/html/html-tutorial.html 笔记 HTML 样式- CSS CSS (Cascading Style Sheets) 用于渲染HTML...

Danny1076376440的博客 751

HTML5笔记二

转载地址:http://www.cnblogs.com/sailxc/archive/2011/06/24/2089106.html HTML5的新的表单属性  新的form属性: l   autocomplete l   novalidate   新的input属性: l   autocomplete l   autofocus l   fo

lyx_lyq的博客 290

HTML5学习笔记(二)

HTML5新增了很多公共属性。▶ hidden▶ data-*我们可以使用hidden属性来显示或隐藏某一个元素。在HTML5中,我们可以使用draggable属性来定义某一个元素是否可以被拖动。draggable有两个属性值:true和false。默认值为false。其实draggable="true"只能定义元素可以被拖动这一个行为,拖动后并不会改变元素的位置。在HTML5中,我们可以使用contenteditable属性来定义某个元素的内容是否可以被编辑。

sinat_37138973的博客 2470

【HTML5学习】HTML5学习整理笔记(二)

接上一篇 (六):HTML5样式,链接和表格 ①:HTML样式: 1.标签: :样式定义 :资源引用 2.熟悉: rel=”stylesheet”:外部样式表 type=”text/css”:引用文档的类型 margin-left:边距 HTML三

江清清的专栏 1846

html5相关笔记(二)

1.document.querySelector("button:nth-child()3"),是可以获取到元素的,html5新增的获取dom对象的api是支持css3新的选择器的。2.html5新增的语义化标签,多媒体盒子标签 figure,专门用来放视频标签、音频标签、图片标签等,&lt;figure&gt;&lt;figcaption&gt;视频&lt;/figcaption&gt;&lt;...

jwlLWJ_2018的博客 295

【HTML教程】跟着菜鸟学语言—HTML5个人笔记经验(二)

标签描述<abbr>定义缩写<address>定义地址<bdo>定义文字方向定义长的引用<q>定义短的引用语<cite>定义引用、引证<dfn>定义一个定义项目。PS:牛牛学习的语言没几个,语言领悟能力也不算强,所以大部分都是借鉴别人的。但是只要学过来的就是自己的。所以还请各位看官手下留情,多多包涵。牛牛也欢迎给位看官指正、讨论交流!

qq_47493625的博客 1511
上一篇: Git版本控制器、GitHub/码云使用、以及Linux/windows常见命令
下一篇: canvas时钟案例
智汇风渔AI小白
博客等级 码龄7年 1万+粉丝 179原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智汇风渔AI小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值