canvas画笑脸

news2024/9/21 18:03:32

用到

  • stroke()控制线条
  • fill()填充区域;fillStyle填充样式
  • beginPath()和closePath() :两个不相关路径间需要配合使用
  • 线性渐变createLinearGradient(x0, y0, x1, y1),
    • x0:起点的 x 轴坐标。
    • y0:起点的 y 轴坐标。
    • x1:终点的 x 轴坐标。
    • ​y1:终点的 y轴坐标。
  • 径向渐变:createRadialGradient(x0, y0, r0, x1, y1, r1) 
    • x0:起始圆的x轴坐标,
    • y0:起始圆的x轴坐标,
    • r0:起始圆的半径。必须是非负数且有限。
    • x1:端圆的 x 轴坐标,
    • y1:端圆的 y轴坐标,
    • r1:结束圆的半径。必须是非负数且有限。
  • addColorStop(偏移量(偏移量在0-1之间),'颜色')
  • 画正圆:arc(x, y, radius, startAngle, endAngle, counterclockwise),
    • x,y:中心点坐标;radius:半径;
    • startAngle:圆弧开始的弧度,从x轴正处测量(转换为角度:角度* Math.PI / 180)
    • endAngle:圆弧结束的弧度,从x轴正处测量(转换为角度:角度* Math.PI / 180)
    • counterclockwise:布尔值,顺时针(false)还是逆时针(true)圆弧,默认顺时针
  • 画椭圆: ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, counterclockwise)
    • x,y:椭圆中心点x轴和y轴坐标;
    • radiusX:椭圆长轴半径,非负数;
    • radiusY:椭圆短轴半径,非负数;
    • rotation:椭圆旋转角度,以弧度表示,可用 角度* Math.PI / 180 转换为角度;
    • startAngle:偏心角,从正 x 轴顺时针测量 并以弧度表示(就是从哪个角度开始画椭圆的线段 起点);
    • endAngle:偏心角,从正 x 轴顺时针测量 并以弧度表示(就是从哪个角度结束画椭圆的线段 终点);
    • counterclockwise:布尔值,顺时针(false)还是逆时针(true)圆弧,默认顺时针
<body>
    <canvas width="600" height="400" id="canvas"></canvas>
    <script>
        // 1、获取canvas(画布标签)
        const canvas = document.getElementById('canvas')
        // 2、获取画笔对象
        const context = canvas.getContext('2d');

        // 3、画圆 (两种画圆方式都可以)
        // 3.1 画外面的大圆
        // context.arc(300, 200, 100, 0 * Math.PI / 180, 360 * Math.PI / 180)
        context.arc(300, 200, 100, 0, 2 * Math.PI)
        // context.fillStyle = 'red' // 填充颜色
        let g = context.createLinearGradient(200,100,400,200) // 200,100:起点xy轴坐标;400,200:终点xy轴坐标
        g.addColorStop(0,'yellow')
        g.addColorStop(1,'red')
        context.fillStyle = g // 填充渐变颜色


        context.fill()
        context.stroke() // 控制外边框线条是否显现


        // 3.2画左眼 (需要定位好坐标)
        // 在两个不相关的图形之间,需要告诉context,重新生成一个新的路径context.beginPath()
        context.beginPath()
        context.arc(250, 150, 20, 0 * Math.PI / 180, 360 * Math.PI / 180)
        context.stroke()
        // 有一个配合路径,闭合路径 context.closePath()
        context.closePath()

        // 3.2 画右眼
        context.beginPath()
        context.arc(350, 150, 20, 0 * Math.PI / 180, 360 * Math.PI / 180)
        context.stroke()
        context.closePath()

        // 3.3 画鼻子
        context.beginPath()
        context.ellipse(300, 200, 10, 20, 0, 0, 2 * Math.PI)
        context.stroke()
        context.closePath()

        // 3.4 画嘴巴 半圆弧
        context.beginPath()
        context.arc(300, 200, 80, 0 * Math.PI / 180, 180 * Math.PI / 180)
        context.stroke()
        context.closePath()
    </script>
</body>

效果

此处用的是线性渐变的样式,也可改为其他样式,比如径向渐变createRadialGradient(x0, y0, r0, x1, y1, r1) addColorStop(偏移量(偏移量在0-1之间),'颜色')

        let g = context.createRadialGradient(250,150,0,250,150,150) 
        g.addColorStop(0,'yellow')
        g.addColorStop(1,'red')

        context.fillStyle = g // 填充渐变颜色

径向渐变效果: 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mercari煤炉上架产品需要注意什么?Mercari煤炉批量上传工具

Mercari煤炉是日本最大的二手交易平台之一&#xff0c;不仅拥有稳定的日本市场&#xff0c;还扩展到了美国&#xff0c;如今Mercari美国市场用户数量众多&#xff0c;商品从上架到出单的速度很快&#xff0c;通常不会超过三天&#xff0c;上架当然出单的卖家都很多&#xff01;…

硬件基础知识

驱动开发分为&#xff1a;裸机驱动、linux驱动 嵌入式&#xff1a;以计算机技术为基础&#xff0c;软硬结合的、可移植、可剪裁的专用计算机 单片机最小单元&#xff1a;vcc gnd reset 晶振 cpu --- soc :system on chip 片上外设 所有的程序都是在soc&#xff08;cpu&…

[C++进阶[六]]list的相关接口模拟实现

1.前言 本章重点 在list模拟实现的过程中&#xff0c;主要是感受list的迭代器的相关实现&#xff0c;这是本节的重点和难点。 2.list接口的大致框架 list是一个双向循环链表&#xff0c;所以在实现list之前&#xff0c;要先构建一个节点类 template <class T> struct L…

Packet Tracer - 配置编号的标准 IPv4 ACL(两篇)

Packet Tracer - 配置编号的标准 IPv4 ACL(第一篇) 目标 第 1 部分&#xff1a;计划 ACL 实施 第 2 部分&#xff1a;配置、应用和验证标准 ACL 背景/场景 标准访问控制列表 (ACL) 为路由器 配置脚本&#xff0c;基于源地址控制路由器 是允许还是拒绝数据包。本练习的主要内…

华为OD机试 - 最大子矩阵 - 卡德恩算法(动态规划)(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

wav怎么转mp3格式?给你推荐几种音频格式转换方法

wav怎么转mp3格式&#xff1f;将wav文件转换为MP3格式是一个常见的操作&#xff0c;尤其适用于需要节省存储空间或确保文件兼容性的场景。wav文件保存了音频的所有原始数据&#xff0c;这使得它们的文件体积往往非常庞大。相比之下&#xff0c;MP3格式通过有损压缩技术显著减小…

费用管理系统如何优化企业年报台账归集流程?

随着企业规模的扩大和业务的复杂化&#xff0c;财务管理工作的重要性日益凸显。其中&#xff0c;年报台账归集作为财务管理的重要环节&#xff0c;不仅关乎企业财务数据的准确性和完整性&#xff0c;更直接影响到企业决策的科学性和合理性。面对海量的财务数据和复杂的归集要求…

算法训练——day15数组交集(是否去重)

349. 两个数组的交集 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的 交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2]示例 2&#xff1a; 输入…

AI逻辑推理入门

参考数据鲸 (linklearner.com) 1. 跑通baseline 报名 申领大模型API 模型服务灵积-API-KEY管理 (aliyun.com) 跑通代码 在anaconda新建名为“LLM”的环境,并安装好相应包后,在jupyter notebook上运行baseline01.ipynb 2. 赛题解读 一般情况下,拿到一个赛题之后,我们需…

Python酷库之旅-第三方库Pandas(121)

目录 一、用法精讲 536、pandas.DataFrame.set_axis方法 536-1、语法 536-2、参数 536-3、功能 536-4、返回值 536-5、说明 536-6、用法 536-6-1、数据准备 536-6-2、代码示例 536-6-3、结果输出 537、pandas.DataFrame.set_index方法 537-1、语法 537-2、参数 …

Games101图形学笔记——着色

Shading Z-buffering&#xff08;深度缓冲&#xff09; Shading&#xff08;着色&#xff09;画家算法Z-BufferShading(着色&#xff09;Blinn-Phong Reflectance Model&#xff08;布林冯反射模型&#xff09;漫反射能量守恒 着色高光Blinn-Phong Reflection ModelShadingFreq…

Cpp输出多字符常量警告

Cpp输出多字符常量警告 Cpp中用单引号(single quotes)表示单个字符(single character)&#xff0c;例如a&#xff0c;$&#xff0c;用双引号(double quotes)表示字符串文本(text)&#xff0c;例如"Hello World! " 当在一个单引号里面存在多个字符时&#xff0c;Cpp…

怎么增加音频的音量?这几种方法可以轻松增加音频的音量!

怎么增加音频的音量&#xff1f;在日常生活的纷繁场景中&#xff0c;音频音量偏低的问题往往悄然成为我们不可忽视的困扰&#xff0c;它虽非重大难题&#xff0c;却能在关键时刻带来诸多不便与挑战&#xff0c;设想一下&#xff0c;在喧嚣的街头或拥挤的咖啡馆里&#xff0c;微…

ES分词导致查询结果不准确

问题现象 索引里面有数据&#xff0c;而没有查询出来。 如下图所示&#xff0c;术语库&#xff08;索引&#xff09;中里面有一条数据的原文是“层”&#xff0c;而根据完整的原文来查询该原文中的术语&#xff0c;并未将该术语查询出来。 根据原文查询该原文中的术语&#x…

FreeRTOS学习——接口宏portmacro.h

FreeRTOS学习——接口宏portmacro.h&#xff0c;仅用于记录自己阅读与学习源码 FreeRTOS Kernel V10.5.1 portmacro版本&#xff1a;GCC/ARM_CM7 portmacro.h是什么 portmacro.h头文件&#xff0c;用于定义与特定硬件平台相关的数据类型和常量。 在移植过程中&#xff0c;…

VulhubDC-4靶机详解

项目地址 https://download.vulnhub.com/dc/DC-4.zip实验过程 将下载好的靶机导入到VMware中&#xff0c;设置网络模式为NAT模式&#xff0c;然后开启靶机虚拟机 使用nmap进行主机发现&#xff0c;获取靶机IP地址 nmap 192.168.47.1-254根据对比可知DC-4的一个ip地址为192.1…

无人机光电吊舱的技术!!

1. 成像技术 可见光成像&#xff1a;通过高分辨率相机捕捉地面或空中目标的清晰图像&#xff0c;提供直观的视觉信息。 红外热成像&#xff1a;利用红外辐射探测目标的温度分布&#xff0c;实现夜间或恶劣天气条件下的隐蔽目标发现。 多光谱成像&#xff1a;通过不同波段的光…

日用百货小程序如何渠道经营开店

将货更多的卖出去是每位商家的心声&#xff0c;日用百货商家手中的货具备多样性&#xff0c;挑选的用户也多&#xff0c;由于货单价较低&#xff0c;因此不断获客并其多买/复购/留存/裂变等是长期发展的关键点。 如何获得更多经营渠道&#xff0c;线上找寻出路是方法之一&…

ROS和ROS2借助智能大模型的学习和研究方法

机器人相关知识的本身和价值-CSDN博客 知识本身在智能时代毫无价值&#xff0c;需要基于知识应用和创新才有价值。 学历报废并非来自扩招&#xff0c;而是智能模型的快速发展。-CSDN blink-领先的开发者技术社区 2024年中秋&#xff0c;智能模型实力已经如此&#xff0c;但还…

智算筑基,九章云极DataCanvas公司闪耀2024年服贸会

9月12日&#xff0c;2024年中国国际服务贸易交易会&#xff08;以下简称“服贸会”&#xff09;在北京隆重开幕&#xff0c;九章云极DataCanvas公司携AI智算产品系列深度参展本届服贸会&#xff0c;为观众奉上技术与应用深度融合的参展盛宴。 本届服贸会由中华人民共和国商务部…