首页 > 其他分享 >canvas基础3

canvas基础3

时间:2023-04-08 11:34:48浏览次数:42  
标签:10 canvas gradient 30 基础 50 坐标 context

canvas基础3

一、绘制图像

// 2d 绘图上下文内置支持操作图像。

// 如果想把现有图像绘制到画布上,可以使用 drawImage() 方法。

// context.drawImage(图像, x坐标, y坐标);
context.drawImage(image, 10, 10);

// context.drawImage(图像, x坐标, y坐标, 图像宽度, 图像高度);
context.drawImage(image, 50, 10, 20, 30);

// context.drawImage(图像, 源图像x坐标, 源图像y坐标, 源图像宽度, 源图像高度, 目标区域x坐标, 目标区域y坐标, 目标区域宽度, 目标区域高度);
context.drawImage(image, 0, 10, 50, 50, 0, 100, 40, 60);

二、阴影

// 2d 上下文可以根据以下属性的值自动为已有形状或路径生成阴影。

// shadowColor: CSS颜色值,表示要绘制的阴影颜色,默认为黑色。

// shadowOffsetX: 阴影相对于形状或路径的 x 坐标的偏移量,默认为0。

// shadowOffsetY: 阴影相对于形状或路径的 Y 坐标的偏移量,默认为0。

// shadowBlur: 像素,表示阴影模糊量。默认值为 0,表示不模糊。



let context = drawing.getContext("2d");
// 设置阴影
context.shadowOffsetX = 5;
context.shadowOffsetY = 5;
context.shadowBlur  = 4;
context.shadowColor   = "rgba(0, 0, 0, 0.5)";      
// 画一个红色矩形
context.fillStyle = "#ff0000";
context.fillRect(10, 10, 50, 50);
// 画一个蓝色矩形
context.fillStyle = "rgba(0,0,255,1)";
context.fillRect(30, 30, 50, 50);


// 浏览器输出如下

阴影 canvas01.png

三、渐变

// 渐变通过 CanvasGradient的实例表示,在 2d 上下文中创建和修改都非常简单。

// 要创建一个新的线性渐变,可以调用上下文的 createLinearGradient() 方法。

// 这个方法接收 4 个参数:起点 x 坐标、起点 y 坐标、终点 x 坐标和终点 y 坐标。


let gradient = context.createLinearGradient(30, 30, 70, 70);
gradient.addColorStop(0, "white");
gradient.addColorStop(1, "black");

// 画一个红色矩形
context.fillStyle = "#ff0000";
context.fillRect(10, 10, 50, 50);
// 绘制渐变矩形
context.fillStyle = gradient;
context.fillRect(30, 30, 50, 50);


// 浏览器输出如下

渐变 canvas02.png

// 以上代码执行之后绘制的矩形只有左上角有一部分白色。

// 代码改进如下:

function createRectLinearGradient(context, x, y, width, height) {
  return context.createLinearGradient(x, y, x+width, y+height);
}

let gradient = createRectLinearGradient(context, 30, 30, 50, 50);
gradient.addColorStop(0, "white");
gradient.addColorStop(1, "black");
// 绘制渐变矩形
context.fillStyle = gradient;
context.fillRect(30, 30, 50, 50);


// 浏览器输出如下

渐变2 canvas03.png

// 径向渐变(或放射性渐变)要使用 createRadialGradient() 方法来创建。

// 这个方法接收6个参数,分别对应两个圆形圆心的坐标和半径。


let gradient = context.createRadialGradient(55, 55, 10, 55, 55, 30);
gradient.addColorStop(0, "white");
gradient.addColorStop(1, "black");
// 画一个红色矩形
context.fillStyle = "#ff0000";
context.fillRect(10, 10, 50, 50);
// 绘制渐变矩形
context.fillStyle = gradient;
context.fillRect(30, 30, 50, 50);



// 浏览器输出如下

径向渐变 canvas04.png

标签:10,canvas,gradient,30,基础,50,坐标,context
From: https://blog.51cto.com/u_14483476/6177476

相关文章

  • 逍遥自在学C语言 | 位运算符的基础用法
    前言一、人物简介第一位闪亮登场,有请今后会一直教我们C语言的老师——自在。第二位上场的是和我们一起学习的小白程序猿——逍遥。二、构成和表达方式位运算符是一组用于在二进制数之间进行操作的运算符运算符名称示例&位与a&&b|位或a|b......
  • JS基础语法
    书写语法区分大小写:与Java一样,变量名、函数以及其他任何一切东西都是区分大小写的每行结尾的分号可有可无,建议写上注释单行注释://多行注释:/**/大括号表示代码块输出语句一:window.alert写入警告框window.alert('hello1');二:document.write()写入HTML输出d......
  • 爬虫基础内容回顾
    回顾基础内容浏览器.简单聊聊浏览器工作原理:浏览器在加载页面源代码的时候.会遇到一些特殊的东西1.图片<img>2.css样式<linkhref="xxxxx.css">3.js文件<scriptsrc="xxxxx.js>......
  • 图神经网络 基础、前沿与应用 第零章 术语 & 符号 阅读笔记
    图的基本概念中心度:用来衡量图中节点的重要性。中心度的基本假设是:如果其他重要的节点也连接到该节点,则认为该节点是重要的。常见的中心度度量包括度数中心度、特征向量中心度、间隔性中心度和接近性中心度。邻域:一个节点的邻域一般是指与该节点相近的其他节点的集合(距离为1)。......
  • 图神经网络 基础、前沿与应用 第一章 表征学习 阅读笔记
    导读表征学习的目标是从数据中提取足够但最少的信息。传统上,该目标可以通过先验知识以及基于数据和任务的领域专业知识来实现,这也被称为特征工程。特征工程是利用人类的现有知识的一种方式,旨在从数据中提取并获得用于机器学习任务的判别信息(比如从音频中通过傅立叶变换提取出mel......
  • 图神经网络 基础、前沿与应用 第三章 图神经网络 阅读笔记
    导读传统的深度学习技术已经在图像等欧式数据或文本和信号等序列数据上取得巨大的成功。但也有很多领域数据需要用复杂的图结构来表达,这些图结构的数据可以编码复杂的点对关系,以学习更丰富的信息表征;另一面,原始数据(图像或连续文本)的结构和语义信息中纳入特定领域知识可以捕捉数......
  • 图神经网络 基础、前沿与应用 第二章 图表征学习 阅读笔记
    摘要图表征学习的目的是将图中的节点嵌入低维的表征并有效地保留图的结构信息。导读许多复杂的系统具有图的形式,如社交网络、生物网络和信息网络。为了有效地处理图数据,第一个关键的挑战是找到有效的图数据表征方法,也就是如何简洁地表征图,以便在时间和空间上有效地进行高级的......
  • CSS基础选择器
    基础选择器前端页面结构如下<h1>h1:标签选择器对选定的所有的标签都生效</h1><p>p:标签选择器对选定的所有的标签都生效</p><divclass="green">div:类选择器测试</div><divid="myid">id选择器测试,id是唯一的</div>效果展示如下标签选择器加上如下代码......
  • Kubernetes 基础入门
    一、Kubernetes简介一、背景1、部署方式的变迁传统时代的部署在物理服务器上运行应用程序无法为应用程序定义资源边界导致资源分配问题例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果可能导致其他应用程序的性能下降。......
  • Java基础知识点(接口1)
    一:接口出现接口的原因:让两个类中的共同行为具有统一性。实质上接口就是一种规则。二:接口与抽象类的异同接口是一种规则,是对行为的抽象。接口的定义和使用:接口用interface关键字来定义publicinterface接口名{}接口不能实例化。接口和类之间是实现关系,通过Implements关键字来表示......