分享篇:Canvas绘制简单图像

news2024/11/19 22:33:23

目录

Canvas绘制简单图形需要用到的基本知识:

1.moveTo()

2. lineTo()

3.stroke()

4.strokeStyle/lineWidth

5.beginPath()

6.closePath()

7.arc()

8.createLinearGradient()

9.createRadialGradient()

10.createConicGradient()

11.addColorStop()

绘制直线

示例 

绘制折线

 示例

绘制多边形

绘制三角形示例 

 绘制笑脸

示例 

效果图

渐变效果 

线性渐变

示例折线渐变

径向渐变

锥形渐变


Canvas绘制简单图形需要用到的基本知识:

1.moveTo()

       移动到起始点:使用 moveTo() 方法将画笔移动到直线的起始点。这个方法接受 x 和 y 坐标作为参数,用于指定起始点的位置。

2. lineTo()

       画直线:使用 lineTo() 方法绘制直线。它接受 x 和 y 坐标作为参数,用于指定直线的终点位置。

3.stroke()

        描边路径:使用 stroke() 方法来描绘路径,即绘制直线。这个方法会将路径上的线条以当前设置的属性进行描边。

4.strokeStyle/lineWidth

       设置线条属性:要绘制直线,你需要设置一些线条属性,如线条的颜色、宽度、端点样式等。可以使用上下文对象的属性来设置这些属性。例如,使用 context.strokeStyle 来设置线条的颜色,使用 context.lineWidth 来设置线条的宽度。

5.beginPath()

       开始路径:在绘制直线之前,需要使用 beginPath() 方法来开始一个新的路径。这个方法会将当前路径重置为空路径,以便开始绘制新的路径。

6.closePath()

      用于创建一个从当前路径绘制到起始点的路径段,并闭合路径。

7.arc()

   arc() 是 Canvas 上的一个方法,用于绘制弧形或圆形。arc(圆心,圆心,半径,圆弧的起始点,x 轴方向开始计算,单位以弧度表示。,圆弧的终点,单位以弧度表示。,可选的Boolean值,如果为 true,逆时针绘制圆弧,反之,顺时针绘制); 

8.createLinearGradient()

        用于创建一个线性渐变对象,可以用于填充或描边图形。createLinearGradient(x0, y0, x1, y1) 方法接受四个参数来指定线性渐变的起点和终点的坐标:(x0, y0):渐变起点的坐标。(x1, y1):渐变终点的坐标。

9.createRadialGradient()

      创建一个径向渐变对象,可以用于填充或描边图形。

  createRadialGradient(x0, y0, r0, x1, y1, r1) 方法接受六个参数来指定径向渐变的起点、半径和终点的坐标:

   (x0, y0):渐变起点的坐标。

    r0:起点的半径。

   (x1, y1):渐变终点的坐标。

   r1:终点的半径。

10.createConicGradient()

     锥形渐变这个方法目前还没有广泛的浏览器支持createConicGradient(45*(Math.PI)/180,100,100

      第一个参数 45*(Math.PI)/180 表示渐变的起始角度。在这里,它被设置为 45 度(π/4 弧度)。您可以根据需要进行角度的转换,例如将度数转换为弧度。

      第二个参数 100 表示渐变的中心点的 x 坐标。在此示例中,将中心点设置为(100,100)。        第三个参数 100 表示渐变的中心点的 y 坐标。同样,在此示例中,中心点的 y 坐标也设置为 100。

11.addColorStop()

addColorStop是Canvas API中的一个方法,用于向渐变对象添加颜色停止点。

绘制直线

        绘制直线需要用到moveTo() lineTo() stroke()等方法,演示代码如下。需要注意的是,moveTo() lineTo()参数是坐标位置 x,y moveTo() lineTo()分别对应直线的起点和终点。

示例 

<script>
    //1.创建 canvas 标签
    let canvas = document.createElement('canvas');
    canvas.width= 600;
    canvas.height = 400;
    document.body.append(canvas)
    //2.得到 context 对象
    let context = canvas.getContext('2d');
    //3.画直线  
    //3.1起点
    context.moveTo(100,100);  //moveTo() 起点
    //3.2终点  
    context.lineTo(300,100);  //lineTo通过lineTo 把线画到什么地方
     //3.3调用画线的方法
     context.stroke();
</script>

绘制折线

       绘制折线需要的用到moveTo() lineTo() stroke(),折线的绘制和直线的绘制原理一致,使用moveTo()规定折线的起点,lineTo(),规定折线需要经过的位置,再使用stroke()绘制路径即可。

 示例

<script>
      //1.创建 canvas 标签
    let canvas = document.createElement('canvas');
    canvas.width= 600;
    canvas.height = 400;
    canvas.style.background = 'pink';
    document.body.append(canvas)
    //2.得到 context 对象
    let context = canvas.getContext('2d');
    //3.画折线  
    //3.1起点
    context.moveTo(100,100)
    //3.2使用lineto 依次经过
    context.lineTo(200,200);
    context.lineTo(300,100);
    context.lineTo(400,200);
    //3.3使用 stroke 画图
    context.stroke();
</script>

绘制多边形

    有了上面两个例子我们再来绘制多边形会简单很多,绘制多边形和绘制直线折线本质上都是一样的,使用moveTo()规定起点,lineTo()规定需要经过的点,再使用stroke()绘制路径即可。下面是一个绘制三角形的例子以供参考。

绘制三角形示例 

<script>
     //1.创建 canvas 标签
  let canvas = document.createElement('canvas');
  canvas.width= 600;
  canvas.height = 400;
  document.body.append(canvas)
  //2.得到 context 对象
  let context = canvas.getContext('2d');

  context.moveTo(100,300);
  context.lineTo(100,100);
  context.lineTo(400,100);
  // context.lineTo(230,159);
  context.lineTo(100,300)
  context.stroke();
</script>

 绘制笑脸

       绘制笑脸需要用到arc(),beginPath(),等方法,需要使用beginPath()创建新的路径绘制每个圆时都会使用 stroke() 方法,默认情况下,绘制的路径会沿着之前的路径绘制,形成相互连接的效果,而这些圆之间是相互连接的。closePath()是配合的beginPath()api 闭合路径

示例 

<script>
     //1.创建 canvas 标签
  let canvas = document.createElement('canvas');
  canvas.width= 600;
  canvas.height = 400;
  document.body.append(canvas)
  //2.得到 context 对象
  let context = canvas.getContext('2d');

  //画笑脸
  //先画大圆
  context.arc(300,200,100,0*Math.PI/180,360*Math.PI/180);
  context.stroke();
  
  //画左眼
  //在两个不相关的图像之间,需要告诉 context,需要从新生产一个新的路径
  context.beginPath();
  context.arc(250,150,20,0,2*Math.PI);
  context.stroke();
//   有一个同配合的api 闭合路径
  context.closePath();
  //画右眼
  context.beginPath();
  context.arc(350,150,20,0,2*Math.PI);
  context.stroke();
  context.closePath();
 
  //画鼻子
  context.beginPath();
  context.arc(300,200,10,0,2*Math.PI);
  context.stroke();
  context.closePath();
  
//   画嘴巴
context.beginPath();
  context.arc(300,200,80,0,Math.PI);
  context.stroke();
  context.closePath();
</script>

效果图

渐变效果 

线性渐变

let canvas = document.querySelector('canvas');
let context = canvas.getContext('2d');

// 创建线性渐变对象
let gradient = context.createLinearGradient(0, 0, 200, 0);
// 设置渐变的颜色
gradient.addColorStop(0, 'red');     // 起点颜色为红色
gradient.addColorStop(1, 'blue');    // 终点颜色为蓝色

// 使用线性渐变填充矩形
context.fillStyle = gradient;
context.fillRect(50, 50, 200, 100);

        在上述示例中,首先使用 createLinearGradient() 方法创建一个线性渐变对象。起点坐标为 (0, 0),终点坐标为 (200, 0),即水平从左到右的渐变。然后,通过 addColorStop() 方法设置渐变的颜色。在本例中,起点颜色设置为红色(位置比例为 0),终点颜色设置为蓝色(位置比例为 1)。最后,使用 fillRect() 方法绘制一个矩形,并使用线性渐变对象作为填充样式,使矩形按照渐变色进行填充。

示例折线渐变

<script>
     //1.创建 canvas 标签
  let canvas = document.createElement('canvas');
  canvas.width= 600;
  canvas.height = 400;
  document.body.append(canvas)
  //2.得到 context 对象
  let context = canvas.getContext('2d');
  //把线条加粗
  context.lineWidth=10;
  //实现渐变
  let g = context.createLinearGradient(100,200,300,400);
  g.addColorStop(0,'yellow');
  g.addColorStop(0.25,'orange');
  g.addColorStop(0.5,'pink');
  g.addColorStop(1,'purple');
  //把渐变赋值给 context折线
  context.strokeStyle = g;
  //3.先把折线画出来
  context.moveTo(100,200);
  context.lineTo(200,100);
  context.lineTo(100,300);
  context.lineTo(300,400)
  context.stroke();

</script>

径向渐变

let canvas = document.querySelector('canvas');
let context = canvas.getContext('2d');

// 创建径向渐变对象
let gradient = context.createRadialGradient(100, 100, 50, 100, 100, 150);
// 设置渐变的颜色
gradient.addColorStop(0, 'red');     // 起点颜色为红色
gradient.addColorStop(1, 'blue');    // 终点颜色为蓝色

// 使用径向渐变填充圆形
context.fillStyle = gradient;
context.arc(100, 100, 100, 0, 2 * Math.PI);
context.fill();

         在上述示例中,首先使用 createRadialGradient() 方法创建一个径向渐变对象。起点坐标为 (100, 100),起点半径为 50,终点坐标为 (100, 100),终点半径为 150。这表示渐变从圆心起点开始,从半径为 50 的位置渐变到半径为 150 的位置。然后,通过 addColorStop() 方法设置渐变的颜色。在本例中,起点颜色设置为红色(位置比例为 0),终点颜色设置为蓝色(位置比例为 1)。最后,使用 arc() 方法绘制一个圆形,并使用径向渐变对象作为填充样式,使圆形按照渐变色进行填充。

锥形渐变

<script>
    //1.创建 canvas 标签
  let canvas = document.createElement('canvas');
  canvas.width= 600;
  canvas.height = 400;
  document.body.append(canvas)
  //2.得到 context 对象
  let context = canvas.getContext('2d');
  //渐变
//   创建径向渐变对象
//第一个参数是一个弧度值,如果想要以角度来计算,需要转换一下

 let gradient=  context.createConicGradient(45*(Math.PI)/180,100,100) 
 gradient.addColorStop(0,'red');
 gradient.addColorStop(0.5,'green')
 gradient.addColorStop(1,'red');
//把渐变赋给画笔
context.fillStyle = gradient;
 context.fillRect(0,0,200,200);

</script>

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

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

相关文章

el-table 翻页记住上页选项,包含回显选中的数据

需求为翻页记住上页选项,包含回显选中的数据,然后还能进行新增和取消勾选 首先element管网有提供及住翻页功能 所以可以根据官网提供的方法来改造 一定要做的操作就是清空一下选中的数据,否则不生效,this.$refs.selectTable.clearSelection(); 然后就是处理选中的数据,和原…

Qt Quick Layouts Overview

Qt快速布局概述 #【中秋征文】程序人生&#xff0c;中秋共享# Qt快速布局是用于在用户界面中排列项目的项目。由于Qt快速布局还可以调整其项目的大小&#xff0c;因此它们非常适合可调整大小的用户界面。 开始 可以使用文件中的以下导入语句将 QML 类型导入到应用程序中。.qml…

机器视觉康耐视visionpro-脚本常见的编辑编译错误和运行错误及警告性错误,调试解决办法

3.康耐视VisionPro高级脚本系列教程-3.脚本编辑错误和运行错误调试方法,break和Continue的差别_哔哩哔哩_bilibili 目录 第一:康耐视visionpro脚本-编辑编译错误第二:康耐视visionpro脚本-运行错误第三:康耐视visionpro脚本-警告性错误第一:康耐视visionpro脚本-编辑编译…

三分钟图解事务隔离级别

详细见&#xff1a; 三分钟图解事务隔离级别&#xff0c;看一遍就懂数据库中事务指的是什么 “锁" 是数据库系统区别于文件系统的一个关键特性&#xff0c;其对象是事务&#xff0c;用来锁定的是数据库中的对象&#xff0c;如表、页、行等。锁确实提高了并发性&#xff…

C++之修改结构体成员字节对齐(二百一十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

深度优先搜索和广度优先搜索(C++、MATLAB代码迷宫应用)

深度优先搜索算法与广度优先搜索算法及其C、MATLAB代码迷宫应用 1. 深度优先搜索算法&#xff08;DFS&#xff09;1.1 深度优先搜索伪代码&#xff1a;1.2 案例应用&#xff1a;迷宫最小步数1.2.1 DFS算法MATLAB代码1.2.1 DFS算法C代码 2. 广度优先搜索算法&#xff08;BFS&am…

Redis主从复制(Redis6.2.5版本)

1、Redis单击服务问题&#xff1f; Redis的单机服务在实际的应用中会有很多的问题&#xff0c;所以在实际的使用中如果使用了redis服务&#xff0c;往往都不是单机服务&#xff0c;都会配置主从复制或者哨兵机制及redis的集群服务等。 Redis的单机服务&#xff0c;当主机发生机…

nbcio-boot移植到若依ruoyi-nbcio平台里一formdesigner部分(四)

到目前为止&#xff0c;虽然基础的formdesigner部分已经完成&#xff0c;但流程用formdesigner提交与审批过程中的显示还有问题。 1、后端部分 其中FormConf修改如下&#xff1a; package com.ruoyi.flowable.core;import lombok.Data;import java.util.List; import java.uti…

慢查询SQL如何优化

一.什么是慢SQL? 慢SQL指的是Mysql中执行比较慢的SQL,排查慢SQL最常用的方法是通过慢查询日志来查找慢SQL。Mysql的慢查询日志是Mysql提供的一种日志记录&#xff0c;它用来记录Mysql中响应时间超过long_query_time值的sql,long_query_time的默认时间为10s. 二.查看慢SQL是否…

华为云云耀云服务器L实例评测|基于云耀云服务器在Docker上部署nginx服务

文章目录 1、服务介绍云耀云服务器Docker介绍Docker-Compse介绍 2、在云耀云服务器安装Docker3、通过Docker run命令运行nginx服务4、在云耀云服务器安装docker-compose5、通过docker-compose方式启动nginx服务 1、服务介绍 云耀云服务器 云耀云服务器&#xff08;Hyper Elas…

ArcGIS 10.3安装教程!

软件介绍&#xff1a;ArcGIS是一款专业的电子地图信息编辑和开发软件&#xff0c;提供一种快速并且使用简单的方式浏览地理信息&#xff0c;无论是2D还是3D的信息。软件内置多种编辑工具&#xff0c;可以轻松的完成地图生产全过程&#xff0c;为地图分析和处理提供了新的解决方…

java高级:动态代理

动态代理介绍、准备功能 这节课我们学习一个Java的高级技术叫做动态代理。首先我们认识一下代理长什么样&#xff1f; 假设现在有一个明星坤坤&#xff0c;它有唱歌和跳舞的本领&#xff0c;作为明星是要用唱歌和跳舞来赚钱的&#xff0c;但是每次做节目&#xff0c;唱歌的时…

多线程和并发编程(3)—AQS和ReentrantLock实现的互斥锁

一、管程模型—MESA模型 管程是什么&#xff1f; 管程就是指管理共享变量&#xff0c;以及对共享变量的相关操作。 在管程的发展史上&#xff0c;先后出现过三种不同的管程模型&#xff0c;分别是Hasen模型、Hoare模型和MESA模型。现在正在广泛使用的是MESA模型。 MESA模型…

每日一博 - 反向代理、API 网关、负载均衡

文章目录 概述图解 概述 反向代理、API网关和负载均衡是在网络和服务器架构中用于不同目的的重要组件&#xff0c;它们有不同的功能和应用场景。以下是它们之间的区别和联系&#xff1a; 反向代理&#xff08;Reverse Proxy&#xff09;&#xff1a; 功能&#xff1a;反向代理…

Python 数据可视化:Seaborn 库的使用

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

u盘上面 安装 ubuntu 系统

u盘上面 安装 ubuntu 系统 下载 一个 Ubuntu 22.04.3 LTS 桌面版 https://ubuntu.com/download/desktop 找到一个U盘 参考文章&#xff1a; 把 Ubuntu 装到U盘里随身携带&#xff0c;并同时支持 BIOS 和 UEFI 启动 https://www.luogu.com.cn/blog/GGAutomaton/portable-ubu…

【数据结构】串的定义;存储结构;基本操作的实现

欢迎光~临~^_^ 目录 知识树 1、串的定义 2、串的存储结构 2.1顺序存储 静态存储 动态存储 2.2链式存储 2.3串的堆分配存储表示 3、串的基本操作 3.1求子串 3.2比较操作 3.3定位操作 4、C语言实现串的基本操作 知识树 1、串的定义 串是由零个或多个字符组成的…

Oracle,高斯创建自增序列

某些时候,需要获取到一个自增值 然后点击左下 Apply 也可以通过SQL语句执行 dual在Oracle中是张虚拟表&#xff0c;通常用于执行这样的查询 Oracle中查询语句: select 序列名.nextval from dual 在高斯数据库中:查询是 select my_sequence.nextval 不需要加form xxx 也…

微信小程序项目开发Day1

没接触过&#xff0c;直接看视频学习&#xff1a; 千锋教育微信小程序开发制作前端教程&#xff0c;零基础轻松入门玩转微信小程序_哔哩哔哩_bilibili千锋教育微信小程序开发制作前端教程&#xff0c;零基础轻松入门玩转微信小程序共计56条视频&#xff0c;包括&#xff1a;学…

20230914java面经记录

1.mq消息重复消费 2.mq消息堆积 3.如何实现消费的幂等性&#xff08;网站付款成功发货&#xff0c;使用mq做异步通知发货&#xff09; 4.log&#xff0c;debug&#xff0c;warn&#xff0c;error怎么用 5.java基础 6.效率问题 ArrayList a,b;HashSet c,d ;a,b,c,d各自有10…