canvas基础

news2025/1/24 3:05:39

今天我们简单的来认识学习一下canvas的基础概念和使用方法。

1. 认识canvas

1.1 什么是canvas

在网页开发中,canvas是html5中的一个元素,用于通过JavaScript绘制图形。它可以用来制作简单的图表、动画和游戏等。

1.2. 使用场景
  1. 游戏开发:可以简单实现2d网页游戏,通过绘制和更新动画帧。
  2. 数据可视化:使用canvas可以实现绘制图表和数据图形,比如折线图、柱状图。不过不建议这样做,因为有专门的可视化插件 echarts、hightCharts等。
  3. 图片编辑器:canvas可以加载图片,对图片裁剪、旋转、添加滤镜、保存图片等功能。
  4. 动画制作:canvas适合制作复杂的动画效果,例如粒子动画,过度效果,光影效果等。
  5. 绘画应用 :在线绘画工具和白板应用常使用Canvas,让用户可以直接在网页上进行创作。
  6. 地图和地理应用 :结合地理数据,Canvas可以用来绘制互动地图或坐标绘图,广泛用于地理信息系统(GIS)。
  7. 实时视频处理 :Canvas还可以用来处理视频帧,比如添加滤镜或叠加效果,为视频应用增添功能。

示例:
画板
加载图片
弹珠游戏
图表

1.3 canvas元素
<canvas id="myCanvas" width="500" height="500"></canvas>

canvas有两个属性width、height, 不设置默认 width: 300px height:150px

1.4 兼容性
<canvas>
    您的浏览器不支持canvas
    <!-- or -->
    <img src="canvas.png" alt=""> 
</canvas>

1.5 判断浏览器是否支持
let canvas = document.getElementById('myCanvas');
//判断是否支持canvas
if (canvas.getContext) {
  console.log('支持')
} else {
  console.log('不支持')
}

2. 使用canvas

初始化:

let canvas = document.getElementById('myCanvas');  // 获取dom元素
var ctx = canvas.getContext('2d');   // 获取canvas 2d上下文

canvas基础方法

    initCanvas() {
      const cvs = document.getElementById('canvas')
      this.ctx = cvs.getContext('2d')

      // 设置画布的CSS显示大小
      cvs.style.width = `${displayWidth}px`
      cvs.style.height = `${displayHeight}px`

      // 设置画笔样式
      this.ctx.strokeStyle = '#fff'
      this.ctx.lineWidth = 2
      this.ctx.lineCap = 'round'
      this.ctx.lineJoin = 'round' // 添加线条连接处的样式

      this.ctx.moveTo(0, 0)   // 移动到某一位置
      this.ctx.lineTo(100, 100)  // 连线到某一位置
      this.ctx.stroke()  // 开始画
      this.ctx.closePath()   // 连接路径首尾
      this.ctx.scale(1.5, 1.2)  // 对画布缩放
      
      
      // 设置画笔样式
      this.ctx.strokeStyle = '#fff'  // 画笔颜色
      this.ctx.lineWidth = 2   // 画笔宽度
      this.ctx.lineCap = 'round' // 笔头样式  // round 半圆  butt 平角
      this.ctx.lineJoin = 'round' // 添加线条连接处的样式

	  // 添加图片
	  const img = new Image()
      img.crossOrigin = 'anonymous'  // 设置图片跨域行为
      img.src = require('@/assets/img/baidu.png')
      img.onload = () => {
        this.ctx.drawImage(img, 0, 0)  // 将图片添加到画布,三个属性,分别是  图片资源、图片左上角x轴坐标、图片左上角y轴坐标
      }
      img.onerror = (e) => {
        console.error('图片加载失败:', e)
        alert('图片加载失败,请检查图片地址或网络连接')
      }
	

	// 保存图片
	    const dataUrl = this.ctx.toDataURL('image/png')  // 将canvas转为base64
	// 下载图片
	  const link = document.createElement('a')
      link.download = '我的画布.png'
      link.href = dataUrl
      link.click()
    }
	// 清除画布
 	  this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height)
 	  // 四个属性分别对应 要清除区域的四个坐标

具体方法配置请参考mdn

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

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

相关文章

OneData体系架构详解

阿里巴巴的 OneData 体系架构方法论&#xff0c;主要分为三个阶段&#xff1a;业务板块、规范定义 和 模型设计。每个阶段的核心目标是确保数据的高效管理、共享与分析能力。 一. 业务板块&#xff08;Business Segment&#xff09; 业务板块是OneData体系架构中的第一步&…

【C++】哈希表的使用

unordered_map/unordered_set 这是C11才新增的两个容器 原本觉得avl树和红黑树效率已经够了。 后来探索和觉得哈希还是有必要加进来的。 JAVA里面是这样取名的&#xff1a; unordered_set unordered_map/set与map/set的功能基本一致&#xff0c;但细节上有所不同&#x…

微信小程序1.1 微信小程序介绍

1.1 微信小程序介绍 内容提要 什么是微信小程序 微信小程序的功能 微信小程序使用场景 微信小程序能取代App吗 微信小程序的发展历程 微信小程序带来的机会

前端Vue2项目使用md编辑器

项目中有一个需求&#xff0c;要在前端给用户展示内容&#xff0c;内容有 AI 生成的&#xff0c;返回来的是 md 格式&#xff0c;所以需要给用户展示 md 格式&#xff0c;并且管理端也可以编辑这个 md 格式的文档。 使用组件库 v-md-editor。 https://code-farmer-i.github.i…

26、正则表达式

目录 一. 匹配字符 .&#xff1a;匹配除换行符外的任意单个字符。 二. 位置锚点 ^&#xff1a;匹配输入字符串的开始位置。 $&#xff1a;匹配输入字符串的结束位置。 \b&#xff1a;匹配单词边界。 \B&#xff1a;匹配非单词边界。 三. 重复限定符 *&#xff1a;匹配…

K8S中Service详解(一)

Service介绍 在Kubernetes中&#xff0c;Service资源解决了Pod IP地址不固定的问题&#xff0c;提供了一种更稳定和可靠的服务访问方式。以下是Service的一些关键特性和工作原理&#xff1a; Service的稳定性&#xff1a;由于Pod可能会因为故障、重启或扩容而获得新的IP地址&a…

【真机调试】前端开发:移动端特殊手机型号有问题,如何在电脑上进行调试?

目录 前言一、怎么设置成开发者模式&#xff1f;二、真机调试基本步骤&#xff1f; &#x1f680;写在最后 前言 edge浏览器 edge://inspect/#devices 谷歌浏览器&#xff08;开tizi&#xff09; chrome://inspect 一、怎么设置成开发者模式&#xff1f; Android 设备 打开设…

初探大数据流式处理

文章目录 初探大数据流式处理批式处理系统特点流式处理系统特点大批次计算微批次计算适用场景 流式计算的应用场景流式大数据的特征流式计算的关键技术流式处理框架的特征三大流式数据处理框架 初探大数据流式处理 大数据处理系统主要分为批式处理和流式处理两类。批式处理将大…

快速搭建深度学习环境(Linux:miniconda+pytorch+jupyter notebook)

本文基于服务器端环境展开&#xff0c;使用的虚拟终端为Xshell。 miniconda miniconda是Anaconda的轻量版&#xff0c;仅包含Conda和Python&#xff0c;如果只做深度学习&#xff0c;可使用miniconda。 [注]&#xff1a;Anaconda、Conda与Miniconda Conda&#xff1a;创建和管…

部门管理查询部门,nginx反向代理,前端如何访问到后端Tomcat 注解@RequestParam

接口开发 增删改通常是不用返回data数据&#xff0c;返回null 列表查询-结果封装&#xff0c;时间 前后端联调测试 nginx反向代理&#xff0c;前端如何访问到后端Tomcat服务器 删除部门

PID 控制算法(二):C 语言实现与应用

在本文中&#xff0c;我们将用 C 语言实现一个简单的 PID 控制器&#xff0c;并通过一个示例来演示如何使用 PID 控制算法来调整系统的状态&#xff08;如温度、速度等&#xff09;。同时&#xff0c;我们也会解释每个控制参数如何影响系统的表现。 什么是 PID 控制器&#xf…

AutoSar架构学习笔记

1.AUTOSAR&#xff08;Automotive Open System Architecture&#xff0c;汽车开放系统架构&#xff09;是一个针对汽车行业的软件架构标准&#xff0c;旨在提升汽车电子系统的模块化、可扩展性、可重用性和互操作性。AUTOSAR的目标是为汽车电子控制单元&#xff08;ECU&#xf…

RTMP|RTSP播放器只解码视频关键帧功能探讨

技术背景 我们在做RTMP|RTSP直播播放器的时候&#xff0c;遇到过这样的技术诉求&#xff0c;在一些特定的应用场景中&#xff0c;可能只需要关键帧的信息&#xff0c;例如视频内容分析系统&#xff0c;可能只对关键帧进行分析&#xff0c;以提取特征、检测对象或场景变化。鉴于…

C#防止重复提交

C#防止重复提交 文章目录 C#防止重复提交前言防止重复提交的思路Web API 防止重复提交代码实现代码讲解使用方法 MVC防止重复提交总结 前言 当用户在前端进行提交数据时&#xff0c;如果网络出现卡顿和前端没有给出响应的话顾客通常都会狂点提交按钮&#xff0c;这样就很容易导…

基于深度学习的视觉检测小项目(十五) 用户的登录界面

用户管理离不开的是消息框&#xff08;QMessageBox&#xff09;和对话框&#xff08;QDialog&#xff09;&#xff0c;比如对话框用于用户名和密码输入&#xff0c;消息框用于提示登录成功、密码错误。 • 基础知识&#xff1a;PySide6&#xff08;PyQT5&#xff09;的常用对话…

在 Kubernetes 上快速安装 KubeSphere v4.1.2

目录标题 安装文档配置repo安装使用插件 安装文档 在 Kubernetes 上快速安装 KubeSphere 配置repo export https_proxy10.10.x.x:7890 helm repo add stable https://charts.helm.sh/stable helm repo update安装 helm upgrade --install -n kubesphere-system --create-name…

CPU 缓存基础知识

并发编程首先需要简单了解下现代CPU相关知识。通过一些简单的图&#xff0c;简单的代码&#xff0c;来认识CPU以及一些常见的问题。 目录 CPU存储与缓存的引入常见的三级缓存结构缓存一致性协议MESI协议缓存行 cache line 通过代码实例认识缓存行的重要性 CPU指令的乱序执行通过…

江天科技主要产品销售单价下滑,应收账款、存货周转率大幅下降

《港湾商业观察》廖紫雯 日前&#xff0c;苏州江天包装科技股份有限公司&#xff08;以下简称&#xff1a;江天科技&#xff09;冲击北交所&#xff0c;保荐机构为国投证券。 江天科技主要从事标签印刷产品的研发、生产与销售&#xff0c;公司主要产品包括薄膜类和纸张类的不…

Unity中在UI上画线

在UI中画一条曲线 我封装了一个组件,可以实现基本的画线需求. 效果 按住鼠标左键随手一画. 用起来也很简单,将组件挂到空物体上就行了,红色的背景是Panel. 你可以将该组件理解为一个Image,只不过形状更灵活一些罢了,所以它要放在下面的层级(不然可能会被挡住). 代码 可以…

Cloud Foundry,K8S,Mesos Marathon弹性扩缩容特性对比

一、Cloud Foundry 使用Scaling an Application Using App Autoscaler插件&#xff0c;基于资源使用情况触发简单扩缩容 CPU、内存、Http带宽、延时等 监控这些资源的使用情况决定扩缩容策略&#xff1a;实例是增加还是减少 Instance Limits 限制实例数量范围&#xff0c;定义…