canvas分享,从入门到入门。

news2024/11/17 3:27:29

开始之前

canvas是一个可以使用脚本在其中绘制图形的 HTML 元素.它本身并不具备绘图能力,需要配合JavaScript使用

用途

  • 游戏应用
  • 特效字体
  • 相册,幻灯片
  • 股票行情等动态图像
  • 思维图以及图形编辑器等在线可视化工具

基本特性

  1. canvas元素会初始化宽度为300像素和高度为150像素
  2. canvas元素通过浏览器渲染后,是透明的,不可见的
  3. canvas元素可以使用CSS来定义大小,但在绘制时图像会伸缩以适应它的框架尺寸:如果CSS的尺寸与初始画布的比例不一致,它会出现扭曲。
  4. canvas元素原始坐标原点为canvas画布的左上角

基本特性3介绍

见canvas.html代码说明

上述例子中,用css设置的width为450,height为300,对应默认的画布大小300×150,宽高比例分别为1.5和2,
所以我们设置的矩形的宽(100px)高(100px)实现显示的会是
宽:100px×1.5=150px;
高:100px×2=200px;

效果如下图:
请添加图片描述

绘制线段

  1. 开启轨迹路径
  2. 设置线段的起始点
  3. 设置线段的终点
  4. 设置线段的样式
  5. 开始绘制线段

图形绘制

绘制矩形

ctx.fillRect(x,y,width,height) strokeRect(x,y,width,height)

  • x: 矩形起点横坐标
  • y :矩形起点纵坐标
  • width: 矩形长度
  • height: 矩形高度

清除矩形区域

ctx.clearRect(x,y,width,height)

  • x:清除矩形起点横坐标
  • y:清除矩形起点纵坐标
  • width:清除矩形长度
  • height:清除矩形高度

绘制圆弧

ctx.arc(x, y, radius, starAngle,endAngle, anticlockwise)

  • x:圆心的x坐标
  • y:圆心的y坐标
  • radius: 圆的半径
  • straAngle: 开始角度
  • endAngle: 结束角度
  • anticlockwise: 是否逆时针,(true)为逆时针,(false)为顺时针
    请添加图片描述

渐变

线性渐变

var grans = ctx.createLinearGradient(xStart,yStart,xEnd,yEnd)

  • xstart: 渐变开始点x坐标
  • ystart: 渐变开始点y坐标
  • xEnd: 渐变结束点x坐标
  • yEnd: 渐变结束点y坐标

线性渐变颜色 grans.addColorStop(offset,color)

  • offset:设定的颜色离渐变结束点的偏移量(0~1)
  • color:绘制时要使用的颜色

径向渐变

var cles = ctx.createRadialGradient(xStart,yStart,radiusStart,xEnd,yEnd,radiusEnd)


- xStart: 开始发散圆心x坐标 - yStart: 开始发散圆心y坐标 - radiusStart: 开始发散圆的半径 - xEnd: 结束发散圆心的x坐标 - yEnd: 结束发散圆心的y坐标 - radiusEnd: 结束发散圆的半径

径向渐变颜色rg.addColorStop(offset,color)

  • offset:设定的颜色离渐变结束点的偏移量(0~1)
  • color:绘制时要使用的颜色

发散偏移量的图
请添加图片描述

绘制文字

填充文字:context.fillText(text,x,y)

绘制文字轮廓 context.strokeText(text,x,y)


  • text: 要绘制的文字

  • x: 文字起点的x坐标轴

  • y: 文字起点的y坐标轴

      ctx.font:设置字体样式
    
      ctx.textAlign:水平对齐方式
    
       start、end、right、center
    
      ctx.textBaseline:垂直对齐方式
    
      top、hanging、middle、alphabetic、ideographic、bottom
      
      var length=ctx.measureText(text):计算字体宽度(px)
      length.width:表示字体的宽度
    

canvas变换:

1. 平移 ctx.translate(x,y)
2. 缩放 ctx.scale(x,y)
3. 旋转 ctx.rotate(angle)


**平移** x: 坐标原点向x轴方向平移x y: 坐标原点向y轴方向平移y **缩放** x: x坐标轴按x比例缩放 y: y坐标轴按y比例缩放 **旋转** angle: 坐标轴旋转x角度(角度变化模型和画圆的模型一样) **两个好用的方法** - ctx.save(): 保存在save()之后所做变换之前的坐标系状态. - ctx.restore():恢复save()保存的坐标系状态 关于这两个方法的使用见 demo.html ## 图形移动 ctx.clearRect(x,y,width,height) 清除画布的操作,用来清除canvas标签上面的所有内容

贝塞尔曲线

  • ctx.quadraticCurveTo() 绘制二次贝塞尔曲线,拥有四个参数
    参数1,2代表曲线的起点和终点之间点的坐标,参数3,4代表终点坐标
  • bezierCurveTo() 绘制三次贝塞尔曲线,拥有六个参数
    参数1,2,3,4代表曲线起点和终点之间的两个点坐标,参数5,6代表终点坐标

二阶贝塞尔动画
请添加图片描述
三阶贝塞尔动画

请添加图片描述

贝塞尔曲线在CSS动画中的有使用,就是在动画的运动过程中,控制速率的变化。

  1. CSS动画中,使用贝塞尔曲线作为值的属性有两个,transition-timing-function,animation-timing-function,格式为cubic-bezier(P1x,P1y,P2x,P2y),实际应用中的代码实例 transition: all 3.0s cubic-bezier(0.75, 0.25, 0.25, 0.75)。

  2. 我们大多看到的是,ease,linear,ease-in-out 这样的属性值,其实它们也是贝塞尔曲线值,只不过是官方预定义的,以简化明了的名称,替代了复杂的数值书写方式。
  3. 以下是一些预定义名称对应的曲线值:
  • ease: cubic-bezier(0.25, 0.1, 0.25, 1.0)
  • linear: cubic-bezier(0.0, 0.0, 1.0, 1.0)
  • ease-in: cubic-bezier(0.42, 0, 1.0, 1.0)
  • ease-out: cubic-bezier(0, 0, 0.58, 1.0)
  • ease-in-out: cubic-bezier(0.42, 0, 0.58, 1.0)

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

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

相关文章

Java | Leetcode Java题解之第434题字符串中的单词数

题目&#xff1a; 题解&#xff1a; class Solution {public int countSegments(String s) {int segmentCount 0;for (int i 0; i < s.length(); i) {if ((i 0 || s.charAt(i - 1) ) && s.charAt(i) ! ) {segmentCount;}}return segmentCount;} }

黎巴嫩寻呼机爆炸案背后的技术原理

引言 近日&#xff0c;黎巴嫩发生了一起震惊世界的寻呼机爆炸事件。当地时间9月17日和19日&#xff0c;黎巴嫩多地的寻呼机和对讲机先后发生爆炸&#xff0c;造成了大量人员伤亡。这起事件引发了全球对电子设备安全性的广泛关注。本文将从技术角度分析这次寻呼机爆炸案的背后原…

OTTO奥托机器人开发总结

OTTO机器人是一个开源外壳&#xff0c;硬件和软件的桌面机器人项目&#xff0c;非常适合新手研究和拓展。 我一直希望找一个合适的项目入手研究机器人&#xff0c;这种项目最好是软硬件都开源的&#xff0c;可以随着自己的想法无限的扩展和私人订制&#xff0c;做为初学者&…

【计网】从零开始掌握序列化 --- 基础知识储备与程序重构

从零开始掌握序列化与反序列化 1 初识序列化与反序列化2 再谈Tcp协议3 程序重构3.1 Socket类3.2 回调函数设计3.3 最终的Tcp服务器类 1 初识序列化与反序列化 在刚学习计算机网络时&#xff0c;我们谈到过网络协议栈&#xff0c;其中最上层的就是应用层&#xff0c;那么这个应…

探索Llama 3.1:开源模型的本地部署与创新应用实践

文章目录 1 Llama 3.1模型的突破性进展2 Llama 3.1模型在业务场景中的实践案例3 使用教程4 Llama 3.1在客户服务中的运用 1 Llama 3.1模型的突破性进展 在数字化转型的浪潮中&#xff0c;大型语言模型&#xff08;LLM&#xff09;以其卓越的处理能力和广泛的应用潜力&#xff…

深度学习500问——Chapter14:超参数调整(3)

文章目录 14.5 如何改善GAN的性能 14.6 AutoML 14.6.1 什么是AutoML 14.6.2 自动化超参数搜索方法有哪些 14.6.3 什么是神经网络架构搜索&#xff08;NAS&#xff09; 14.6.4 NASNet的设计策略 14.6.5 网络设计中&#xff0c;为什么卷积核设计尺寸都是奇数 14.6.6 网络设计中&a…

Spring MVC 参数校验 总结

1. 简介 Sping MVC提供了参数校验的方便注解。 2.代码 在pom.xml中添加依赖&#xff1a; <dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>8.0.0.Final</version&g…

Java | Leetcode Java题解之第435题无重叠区间

题目&#xff1a; 题解&#xff1a; class Solution {public int eraseOverlapIntervals(int[][] intervals) {if (intervals.length 0) {return 0;}Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] interval1, int[] interval2) {return i…

海外仓系统如何成为数据管理效率的加速器?

在数字化信息时代&#xff0c;海外仓系统的数据管理效率对企业运营的重要性不言而喻。随着电子商务和跨境贸易的快速发展&#xff0c;高效的数据管理不仅影响着货物的流通速度、客户满意度&#xff0c;还关系到企业的盈利能力。为了在海外市场中立足&#xff0c;提升海外仓的数…

《机器学习》周志华-CH8(集成学习)

8.1个体与集成 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务&#xff0c;有时也被称为多分类器系统&#xff0c;基于委员会的学习。 同质”集成“&#xff1a;只包含同种类型的个体学习器&#xff0c;同质集成中的个体学习器亦称“基学习器”&#xff0…

【html】基础(二)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;js专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &am…

WGCLOUD 性能调优笔记

如果主控端server主机内存资源充裕的话&#xff0c;适当增加内存使用&#xff0c;提升server运算能力 修改server/start.sh中的 -Xms256m -Xmx512m &#xff0c;改为 -Xms1024m -Xmx1024m &#xff0c;重启server生效 也可以设置更高些&#xff0c;比如改为 -Xms2048m -Xmx20…

时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较

引言 近年来&#xff0c;民航旅客周转量一直是衡量国家或地区民航运输总量的重要指标之一。为了揭示民航旅客周转量背后的规律和趋势&#xff0c;本研究旨在综合分析1990年至2023年的相关数据。 通过单位根检验和序列分解&#xff0c;我们确定了民航旅客周转量数据的非平稳性&…

8.13霍夫变换-直线检测

基本概念 霍夫变换&#xff08;Hough Transform&#xff09;是一种用于检测图像中特定形状&#xff08;如直线、圆、椭圆等&#xff09;的技术。在OpenCV中&#xff0c;霍夫变换主要用于检测直线和圆形。这里我们将详细介绍如何使用OpenCV中的霍夫变换来检测直线。 霍夫变换&…

Linux 基础IO(个人笔记)

Linux基础 IO 1.C文件IO操作1.1 hello.c写文件1.2 hello.c读文件1.3 stdin&stdout&stderr 2.系统文件I/O2.1 hello.c写文件2.2 hello.c读文件2.3 open函数介绍2.4 文件描述符 fd2.4.1 文件描述符的分配规则2.4.2 重定向2.4.3 dup2系统调用2.4.4 C文件结构体FILE2.4.5 C…

文件上传、amrkdown编辑器

一、文件上传 这里我以图片为例&#xff0c;进行上传&#xff0c;上传到阿里云oss&#xff08;对象存在中&#xff09; 首先&#xff0c;我们先梳理一下&#xff0c;图片上传的流程 1、前端选择文件&#xff0c;提交文件 前端提交文件&#xff0c;我们可以使用ElementUI中的…

python如何实现日期加减

首先通过import datetime&#xff0c;导入日期处理库。 然后把日期转化成datetime标准格式&#xff0c;使用datetime.datetime.strptime()方法将字符串格式的时间转化为标准格式。 其中"%Y/%m/%d %H:%M:%S"为time字符串的时间格式&#xff1a;Y为年&#xff0c;m为月…

思维导图在线工具哪家强?2024年最新评测

你用过思维导图工具吗&#xff1f;如果品尝需要对事情进行逻辑理顺操作或者需要增强记忆点那我比较推荐使用思维导图在线工具来解决这些问题。这篇文章我将介绍几款思维导图工具来提高我们的效率。 1.福晰思维导图 链接一下&#xff1a;https://www.pdf365.cn/naotu/ 这款思…

JVM的基本组成

一、JDK\JRE\JVM JDK: 全称 "Java Development Kit" &#xff0c;Java 开发工具包&#xff0c;提供 javac 编译器、jheap、jconsole 等监控工具;JRE: 全称"Java Runtime Environment"&#xff0c;Java 运行环境&#xff0c;提供Class Library 核心类库 JV…

【leetcode练习·二叉树】用「遍历」思维解题 I

本文参考labuladong算法笔记[【强化练习】用「遍历」思维解题 I | labuladong 的算法笔记] 257. 二叉树的所有路径 | 力扣 | LeetCode | 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点…