Canvas2D基础

微信小程序中的canvas(2D) drawImage(imageResource, dx, dy, dWidth, dHeight, sx, sy, sWidth, sHeight): 绘制图像。arc(x, y, radius, startAngle, endAngle, counterclockwise): 绘制圆弧路径。setTransform(a, b, c, d, e, f): 设置当前变换矩阵。transform(a, b, c, d, e, f): 使用矩阵多次叠加变换。 阅读详情

Canvas2D基础

  • Canvas2D基础
    • 什么是Canvas
    • 基本使用
    • Rectangles(矩形)
    • Drawing Paths
    • Drawing Text
    • Transformations
    • Drawing Images 图片绘制
    • shadows 加阴影
    • Gradients 渐变色
    • Patterns 模式
    • Working with Image Data 图像原始数据
    • Compositing 合成
    • 总结

Canvas2D基础

什么是Canvas

<canvas>是H5中最受欢迎的元素,在页面上划出一片区域,利用JS在上面画出图形,起初由Apple公司提出,各大浏览器厂商也对其做了不同程度上的实现。canvas中规定了了2D context和3D context(WebGL),目前绝大部分浏览器支持2D context。WebGL的发展还比较缓慢。

基本使用

1、toDataURL() 将画好的图像输出为图片

//get data URI of the image
var imgURI = drawing.toDataURL("image/png");
//display the image
var image = document.createElement("img");
image.src = imgURI;
document.body.appendChild(image);

2、原点是基于canvas元素左上角
3、2D Context的两个基本绘画操作 fill and stroke

Rectangles(矩形)

1、fillRect()

context.fillRect(10, 10, 50, 50);
//draw a blue rectangle that’s semi-transparent
context.fillStyle = "rgba(0,0,255,0.5)";
context.fillRect(30, 30, 50, 50);

2、strokeRect()

//draw a red outlined rectangle
context.strokeStyle = "#ff0000";
context.strokeRect(10, 10, 50, 50);
//draw a blue outlined rectangle that’s semi-transparent
context.strokeStyle = "rgba(0,0,255,0.5)";
context.strokeRect(30, 30, 50, 50);

3、clearRect()

//draw a red rectangle
context.fillStyle = "#ff0000";
context.fillRect(10, 10, 50, 50);
//draw a blue rectangle that’s semi-transparent
context.fillStyle = "rgba(0,0,255,0.5)";
context.fillRect(30, 30, 50, 50);
//clear a rectangle that overlaps both of the previous rectangles
context.clearRect(40, 40, 10, 10);

Drawing Paths

1、如何画一个表盘

var drawing = document.getElementById("drawing");
//make sure <canvas> is completely supported
if(drawing.getContext) {
    var context = drawing.getContext("2d");
    //start the path
    context.beginPath();
    //draw outer circle
    context.arc(100, 100, 99, 0, 2 * Math.PI, false);
    //draw inner circle
    context.moveTo(194, 100); //将光标移动这个内圆绘制的起点上
    context.arc(100, 100, 94, 0, 2 * Math.PI, false);
    //draw minute hand
    context.moveTo(100, 100);
    context.lineTo(100, 15); // 从最后绘制点到(100,15)绘制一条线
    //draw hour hand
    context.moveTo(100, 100);
    context.lineTo(35, 100);
    //stroke the path
    context.stroke();
}

2、判断一个坐标点是否在绘制路线上
context.isPointInPath(100, 100) // true

Drawing Text

1、fillText() 、  strokeText() 后者很少用
2、3个属性font、 textAlign、 textBaseline
3、Demo

context.font = "bold 14px Arial";
context.textAlign = "center";
context.textBaseline = "middle";
context.fillText("12", 100, 20);
//start-aligned
context.textAlign = "start";
context.fillText("12", 100, 40);
//end-aligned
context.textAlign = "end";
context.fillText("12", 100, 60);

4、measureText()的使用 可以度量文字大小

// 如果文字的长度大于140,就将字体缩小
var fontSize = 100;
context.font = fontSize + "px Arial";
while(context.measureText("Hello world!").width > 140) {
    fontSize--;
    context.font = fontSize + "px Arial";
}
context.fillText("Hello world!", 10, 10);
context.fillText("Font size is " + fontSize + "px", 10, 50);

Transformations

  1. 图像变换方法
    rotate(angle)
    scale(scaleX, scaleY)
    translate(x, y)
    transform(m1_1, m1_2, m2_1, m2_2, dx, dy)
    setTransform(m1_1, m1_2, m2_1, m2_2, dx, dy)

  2. 可用translate重新定义原点的位置,
    在画圆的时候,可将原点位置移动圆心位置,这样在画圆定位过程中比较方便

  3. context.rotate 注意是将坐标轴进行旋转

Drawing Images 图片绘制

  1. 从当前canvasd的坐标(10,10)的位置将图片插入进来(注意,如果图片在canvas中装不下,那么图片是插入不进来的)
var image = document.images[0];
 context.drawImage(image, 10, 10);
  1. 指定区域内插入 -- 执行在从(10,10)开始,宽90,高90的区域内绘制图像
context.drawImage(image, 10, 10,90,90)
  1. 将图像上指定区域的部分 插入 canvas中的指定区域(相当于剪切原图像上的一部分到canvas中)
//从图像上(0,10)开始,宽150,高385的区域插入到 canvas中从(0,100)开始,宽40,高60的区域内
context.drawImage(image, 0, 10, 150, 385, 0, 100, 40, 60);

  1. 注意,如果插入进来的图片是在别的域名下的,会报错

shadows 加阴影

DEMO:

var drawing = document.getElementById("drawing");
var context = drawing.getContext("2d");
context.shadowOffsetX = 5;
context.shadowOffsetY = 5;
context.shadowBlur = 4;
context.shadowColor = "rgba(0, 0, 0, 0.5)";
//draw a red rectangle
context.fillStyle = "#ff0000";
context.fillRect(10, 10, 50, 50);
//draw a blue rectangle
context.fillStyle = "rgba(0,0,255,1)";
context.fillRect(30, 30, 50, 50);

Gradients 渐变色

  1. 线性渐变
var gradient = context.createLinearGradient(30, 30, 80, 80);
gradient.addColorStop(0, "white");
gradient.addColorStop(1, "black");
context.fillStyle = gradient;
context.fillRect(30, 30, 50, 50);
  1. 径项渐变
var gradient = context.createRadialGradient(55, 55, 10, 55, 55, 30);
gradient.addColorStop(0, "white");
gradient.addColorStop(1, "black");
context.fillStyle = gradient;
context.fillRect(30, 30, 50, 50);

Patterns 模式

  1. 即图像的重复模式 ,跟css一样 “repeat”, “repeat-x”, “repeat-y”, no-repeat”
var context = drawing.getContext("2d");
var image = document.images[0],
    pattern = context.createPattern(image, "repeat");
//draw a rectangle
context.fillStyle = pattern;  // 图像repeat模式仍然是从(0,0)开始的
context.fillRect(30, 0, 150, 150); // 这里的意思是绘制矩形,并让图像repeat模式在该矩形区域显示,并不是说 图片repeat是从绘制该矩形的起点开始的,渐变也是如此

Working with Image Data 图像原始数据

可以用来做滤镜效果,详细可看  www.html5rocks.com/en/tutorials/canvas/imagefilters/

Compositing 合成

两个图像之间如何纠缠的,这里举一个例子,其他雷同

var drawing = document.getElementById("drawing");
var context = drawing.getContext("2d");
//draw a red rectangle
context.fillStyle = "#ff0000";
context.fillRect(10, 10, 50, 50);
//change the global alpha
context.globalCompositeOperation = "xor";
//draw a blue rectangle
context.fillStyle = "rgba(0,0,255,1)";
context.fillRect(30, 30, 50, 50);

总结

  1. canvas内容就是上面这些了,就好比设计师能用的颜色就那么多,但是将颜色,图形组合起来,创意真的是无限的,canvas也是如此。
  2. webGL是一个 对OpenGL ES 2.0浏览器实现接口,用于3D绘画,生产阶段最好不要用,可用于实验阶段。
javaScript canvas从入门到骨灰级玩家(基础篇) 前言 如果你不认为自己的canvas水平能吊打大部分职业玩家,建议就不要放进收藏夹里吃灰了。 吃个包子的时间就能看完,这点信息量还能给你撑死不成?看完不保证你能入门,但是内容还是比较香的,我都快熬成灰了。 基本用法 毋庸置疑,在HTML结构中肯定是要有一个DOM元素对象承接绘图上下文的。 <canvas id="drawing" width="300" height="300">draw a falleg picture</canvas> 通过js获取绘图上下文和绘图上下文的引用( 阅读详情

相关推荐

鸿蒙日历组件进阶:教你打造个性化日程管理界面(支持月份切换)

本文深入探讨了鸿蒙应用开发中自定义日历组件的构建方法。通过详解基于Grid的布局设计、核心日期算法、月份切换逻辑以及事件管理集成,指导开发者打造支持个性化日程管理的高性能日历界面,提升应用交互体验。

weixin_29207149的博客 66

Canvas—2D 绘图

HTML5 中 新增了 <canvas> 元素。 <canvas> 元素负责在页面中设定一个区域,然后就可以通过 JavaScript 动态的在这个区域内绘制图形。

青蛙king的博客 5762

TCP协议中ARQ自动重传的三种实现方式对比(含SACK详解)

本文深入解析TCP协议中ARQ自动重传的三种实现方式,包括停止-等待、回退N步和选择重传协议,特别详细介绍了SACK机制的工作原理和优势。通过对比分析各协议的效率、复杂度和适用场景,为网络通信中的可靠性传输提供了实用的选型指南。

weixin_30776273的博客 462

3D渲染技术分享:实时3D水面渲染(反射、折射、水深与水岸柔边)

90%的3D项目都在用的实时水面渲染方案

15 年专注游戏引擎与游戏开发,分享实用方案、经验与干货教程! 4760

Aras Innovator生命周期图实战:从配置到权限管理的全流程解析

本文详细解析了Aras Innovator生命周期图的全流程配置与权限管理,从基础概念到实战应用,涵盖状态设置、路径配置、权限控制等核心功能。通过实际案例和代码示例,帮助用户掌握如何高效管理数据生命周期,提升业务流程的规范性和效率。

ee345的博客 168

SAP面试全过程(已拿offer)

周五打电话给我说过了SAP第一轮面试,第二轮要在下周四北京,这几天终于体会到了什么叫做重压下的感觉,越复习越虚,看别人的面经都感觉卧槽这问题也巨难了吧...连去北京可以见妹子这种事情都感觉一点心情都没有。面前准备固然是要有的,但关键是平时就要有料,多想想自己做的项目。当作一个给自己的提醒吧!

cloudray8580的专栏 4万+

Canvas 2D详解

快速入门canvas

石璞东 1790

本地部署gradle

在部署CAS构建执行包时,如果按照CAS的官方命令gradlew clean build,如果系统没安装过gradle,这个步骤将会从网上下载gradle,但是进度非常慢,耗时很长。为了更快地完成项目构建,我们可以直接在本地部署好gradle,节省一点时间。

益添的博客 780

canvas入门基础知识(一)——2D图形

但是要注意的是,设置画布的宽高只能在html标签里通过height和width属性来设置(canvas标签有且只有这两个属性),如果在css里设置,只是将画布拉伸变形了,就好像拿放大镜看一样,会导致失真,其实它本质上的大小并没有变化。简单来说,标签canvas就是一个画布,比如你在代码中写了一个canvas标签,打开live server,在支持canvas的浏览器上显示的就是一个默认长300像素,宽150像素的白色画布,为了方便显示,可以加上阴影或者边框。主要聚焦于2D图形。

2302_80277784的博客 1133

微带天线理论学习笔记(1)

微带天线的概念是由Deschamps于1953年提出来的,它是在一块厚度远小于工作波长的介质基片的一面敷以金属辐射片、一面全部敷以金属薄层作接地板而成。辐射片可以根据不同的要求设计成各种形状。微带天线具有质量轻、体积小和易于制造等优点,广泛应用于个人无线通信中。

qq_36521926的博客 6227

从 VS Code 登录 ABAP Destination,一次把前后端连接跑通

最近很多 ABAP 开发者开始把 VS Code 纳入日常开发环境,原因很直接,VS Code 的轻量体验、命令面板、文件树、插件生态和 AI 编程能力,已经深深影响了现代开发者的工作方式。SAP 官方发布的 ABAP Development Tools for VS Code,也把 ABAP Cloud 开发模型带进了这个编辑器里。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 227

深入 Canvas: 基础 2D API

深入 Canvas: 基础 2D API 文章目录深入 Canvas: 基础 2D API正文1. 基础 2D API 总览1.1 Canvas 标签1.2 渲染上下文1.3 CanvasRenderingContext2D API2. 绘制矩阵3. 绘制路径3.1 直线路径3.2 曲线路径3.3 二次/三次贝塞尔曲线路径4. 绘制样式4.1 填充颜色4.2 描边颜色4.3 绘制透明度4.4 线段样式4.5 渐变颜色4.6 绘制阴影5. 绘制文字5.1 填充/描边文字5.2 文字垂直基准线5.3 测量文字宽

超悠閒的博客 662

STC单片机 普通 I/O 口中断功能介绍和使用

STC32单片机 普通 I/O 口中断功能介绍和使用

perseverance51博客 3048

H5:画布Canvas基础知识讲解(一)之canvas基础、2D context API、路径

HTML5规范引进了很多新特性,其中最令人期待的之一就是Canvas元 素。HTML5 Canvas提供了通过JavaScript绘制图形的方法,此方法使用简单但功能强大。每一个Canvas元素都有一个“上下文(context)” (想象成绘图板上的一页),在其中可以绘制任意图形。浏览器支持多个Canvas上下文,并通过不同的API提供图形绘制功能。 大部分的浏览器都支持2D Canvas上下文——包括Opera,Firefox,Konqueror和Safari。而且某些版本的Opera还支持3D C..

zhulin1028的博客 1260

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

canvas 2d基础

绘制直线 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> canvas{ border: 1px solid red; } </...

痴心的萝卜的博客 591

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android APK开发基础——Android 2D动画之canvas、path和paint

。。。

haobobo710的博客 404

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Canvas基础篇:Path2D对象

本文主要介绍了Path2D对象,以及Path2D和CTX的简单对比,我们可以通过合理结合两者的优势,在 Canvas 绘图中实现效率与灵活性的平衡。

wuhen_n的博客 1213

canvas2D 基础知识 浅析

1.canvas HTML5给出的一个可以展示绘图内容的标签 使用领域: (推荐网站:threejs.org) 1. 游戏 2. 可视化数据 3. Banner广告 4. 多媒体 (1)在 canvas 中使用各种方法描点实际上描述的是一个称为路径( path )的东西 (2)在 canvas 绘图中,所有描述的东西都是路径,只有最后填充或描边的时候才会显示出效果 (...

277

Canvas 2D绘图指南:从基础到实战

Canvas 2D 绘图基础摘要 HTML Canvas通过<canvas>标签创建画布,使用JavaScript获取2D绘图上下文对象进行绘制。基本操作包括:直线/折线/矩形绘制(moveTo、lineTo、rect)、曲线绘制(圆弧/贝塞尔曲线)、文本和图片渲染。可通过fillStyle/strokeStyle设置样式,利用save()/restore()保存和恢复绘图状态。坐标系支持平移、旋转和缩放变换。示例演示了在Nuxt4中实现画板功能,包括鼠标绘图、线宽调节、画布切换及图片导出(支持白底选项)。

qq_38966550的博客 174

canvas学习笔记之2d画布基础的实现

一. Canvas是啥 < canvas > 是一个可以使用脚本(通常是js)来绘图的HTML元素 < canvas > 最早由Apple引入WebKit,用于Mac OS X 的 Dashboard和 Safari 如今,所有主流的浏览器都支持它(IE9+,更低版本需引入Explorer Canvas来支持) 1. 开始画图(渲染上下文) < canvas...

weixin_34232363的博客 143

《HarmonyOS技术精讲-ArkGraphics 2D(方舟2D图形服务)》第一篇:初识ArkGraphics 2D——Canvas组件与基础绘制入门

在HarmonyOS NEXT的应用开发中,如果只是展示图片,直接上Image组件就够了。但一旦涉及到动态图表、游戏界面、自定义仪表盘或者图表标注时,你会发现,没有Canvas还真不行。很多开发者第一次接触ArkGraphics 2D时,第一反应是:“这不就是安卓的Canvas吗?” 但实际用起来会发现,HarmonyOS的Canvas虽然功能类似,但在接口设计、生命周期管理、以及和ArkUI状态绑定的方式上,都有自己的“脾气”。

2601_96191042的博客 297

Android使用Canvas绘制2D图形基础

对于Android绘图:Paint就是画笔,Canvas是画布。Canvas提供了各种绘制图像的API,可以绘制点、线条、圆、矩形、椭圆等。Paint可以设置画笔的特性。

下半夜的风 1106

canvas学习笔记-2d画布基础

一. Canvas是啥 < canvas > 是一个可以使用脚本(通常是js)来绘图的HTML元素 < canvas > 最早由Apple引入WebKit,用于Mac OS X 的 Dashboard和 Safari 如今,所有主流的浏览器都支持它(IE9+,更低版本需引入Explorer Canvas来支持) ...

weixin_33671935的博客 164

无需复杂软件!Motion Canvas 2D动画进阶指南:从基础到实验性功能探索

Motion Canvas 是一款强大的开源工具,让你能够通过代码轻松创建高质量的2D动画。无需复杂的图形界面软件,只需简单的代码知识,就能实现专业级动画效果。本文将带你从基础入门到探索实验性功能,全面掌握 Motion Canvas 的核心技巧。 [![Motion Canvas 标志](https://raw.gitcode.com/gh_mirrors/mo/motion-canvas/r

gitblog_00744的博客 448

android中-使用2D动画 — 图形处理(Canvas基础)

 Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0。今天我们主要要了解的是2D相关的,如果你想看3D的话那么可以跳过这篇文章。 大部分2D使用的api都在android.graphics和android.graphics.drawable包中。他们提供了图形处理相关的: Canvas、ColorFilter、Point(点)...

haishizi1的专栏 307

【基础知识】HTML5 Canvas的绘图环境CanvasRenderingContext2D的使用(各属性简介)

我的处女作《Canvas系列教程》在我的Github上正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作。 教程介绍、教程目录等能在README里查阅。 传送门:https://github.com/827652549/CanvasStudy 目录 前言 属性 提示:你可以扩充2d绘图环境对象的功能 前言 在JavaScript代码中,很少会用到canv...

苏一恒 3294
上一篇: DOM Extensions(DOM扩展)
下一篇: 1小时入手vue
小菜101
博客等级 码龄10年 16粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值