Fabric.js 绘制图形 API 完全指南

news/2024/7/7 9:25:36/ 标签: fabric, javascript, arcgis

Fabric.js 是一个功能强大的 HTML5 Canvas 库,提供了丰富的 API 用于绘制和操作图形对象。本文将详细介绍 Fabric.js 中所有的绘制图形 API 及其参数,帮助开发者全面掌握 Fabric.js 的使用。

安装与引入

安装

通过 npm 安装 Fabric.js:

npm install fabric

引入

在 HTML 文件中引入 Fabric.js:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Fabric.js Example</title><script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/4.6.0/fabric.min.js"></script>
</head>
<body><canvas id="canvas" width="800" height="600"></canvas><script src="app.js"></script>
</body>
</html>

创建 Canvas

在绘制图形之前,需要先创建一个 Canvas 实例:

javascript">const canvas = new fabric.Canvas('canvas');

绘制图形 API

矩形 (Rect)

绘制矩形的 API 是 fabric.Rect。它接受一组参数来定义矩形的属性。

javascript">const rect = new fabric.Rect({left: 100,top: 100,width: 200,height: 100,fill: 'red',stroke: 'black',strokeWidth: 2,angle: 0,opacity: 1,rx: 10,  // 圆角矩形的圆角半径ry: 10   // 圆角矩形的圆角半径
});
canvas.add(rect);

圆形 (Circle)

绘制圆形的 API 是 fabric.Circle。它接受一组参数来定义圆形的属性。

javascript">const circle = new fabric.Circle({left: 300,top: 100,radius: 50,fill: 'blue',stroke: 'black',strokeWidth: 2,angle: 0,opacity: 1
});
canvas.add(circle);

椭圆 (Ellipse)

绘制椭圆的 API 是 fabric.Ellipse。它接受一组参数来定义椭圆的属性。

javascript">const ellipse = new fabric.Ellipse({left: 100,top: 250,rx: 100,  // 水平方向半径ry: 50,   // 垂直方向半径fill: 'green',stroke: 'black',strokeWidth: 2,angle: 0,opacity: 1
});
canvas.add(ellipse);

线条 (Line)

绘制线条的 API 是 fabric.Line。它接受一组参数来定义线条的属性。

javascript">const line = new fabric.Line([50, 50, 200, 200], {left: 100,top: 200,stroke: 'green',strokeWidth: 2,angle: 0,opacity: 1
});
canvas.add(line);

多边形 (Polygon)

绘制多边形的 API 是 fabric.Polygon。它接受一组参数来定义多边形的属性。

javascript">const polygon = new fabric.Polygon([{ x: 200, y: 10 },{ x: 250, y: 50 },{ x: 200, y: 100 },{ x: 150, y: 50 }
], {left: 300,top: 200,fill: 'yellow',stroke: 'black',strokeWidth: 2,angle: 0,opacity: 1
});
canvas.add(polygon);

多线段 (Polyline)

绘制多线段的 API 是 fabric.Polyline。它接受一组参数来定义多线段的属性。

javascript">const polyline = new fabric.Polyline([{ x: 300, y: 300 },{ x: 350, y: 350 },{ x: 400, y: 300 },{ x: 450, y: 350 }
], {left: 100,top: 300,fill: 'transparent',stroke: 'blue',strokeWidth: 2,angle: 0,opacity: 1
});
canvas.add(polyline);

路径 (Path)

绘制路径的 API 是 fabric.Path。它接受一个 SVG 路径字符串和一组参数来定义路径的属性。

javascript">const path = new fabric.Path('M 100 100 L 300 100 L 200 300 z', {left: 200,top: 400,fill: 'purple',stroke: 'black',strokeWidth: 2,angle: 0,opacity: 1
});
canvas.add(path);

文本 (Text)

绘制文本的 API 是 fabric.Text。它接受文本内容和一组参数来定义文本的属性。

javascript">const text = new fabric.Text('Hello Fabric.js', {left: 100,top: 400,fontSize: 30,fill: 'black',angle: 0,opacity: 1,fontFamily: 'Arial',fontWeight: 'bold',fontStyle: 'italic',underline: true,linethrough: true,overline: true
});
canvas.add(text);

图像 (Image)

加载和绘制图像的 API 是 fabric.Image。它可以从 URL 或 HTMLImageElement 对象中加载图像。

javascript">fabric.Image.fromURL('path/to/image.jpg', function(img) {img.set({left: 400,top: 200,scaleX: 0.5,scaleY: 0.5,angle: 0,opacity: 1});canvas.add(img);
});

动态路径 (PathGroup)

绘制由多个路径组成的动态路径组的 API 是 fabric.PathGroup

javascript">const pathData = 'M 0 0 L 100 100 L 200 0 z';
const path1 = new fabric.Path(pathData, { fill: 'red' });
const path2 = new fabric.Path(pathData, { fill: 'blue', top: 50 });const pathGroup = new fabric.PathGroup([path1, path2], {left: 500,top: 300,angle: 0,opacity: 1
});
canvas.add(pathGroup);

参数详解

常用参数

以下是 Fabric.js 中常用的参数及其说明:

  • left:左侧位置
  • top:顶部位置
  • width:宽度
  • height:高度
  • fill:填充颜色
  • stroke:边框颜色
  • strokeWidth:边框宽度
  • angle:旋转角度
  • opacity:不透明度
  • scaleX:水平缩放
  • scaleY:垂直缩放
  • rx:水平圆角半径(用于矩形和椭圆)
  • ry:垂直圆角半径(用于矩形和椭圆)
  • fontSize:字体大小(用于文本)
  • fontFamily:字体家族(用于文本)
  • fontWeight:字体粗细(用于文本)
  • fontStyle:字体样式(用于文本)
  • underline:是否下划线(用于文本)
  • linethrough:是否中划线(用于文本)
  • overline:是否上划线(用于文本)

总结

Fabric.js 提供了一组强大的 API,用于绘制和操作各种图形对象。通过掌握这些 API 和参数,开发者可以创建丰富的图形应用。本文介绍了 Fabric.js 中所有的绘制图形 API 及其参数,希望能帮助您更好地使用 Fabric.js 进行开发。


http://www.ppmy.cn/news/1473108.html

相关文章

Camera Raw:编辑 - 光学

Camera Raw “编辑”模块中的光学 Optics面板主要用于校正相机镜头引起的各种光学畸变和缺陷&#xff0c;如色差、扭曲和晕影等。通过使用镜头配置文件或手动调整&#xff0c;可以进行有效地校正。 ◆ ◆ ◆ 使用方法与技巧 1、删除色差与去边 当相机镜头无法完全聚焦不同波长…

微信小程序利用第三方库xlsx导出excel

微信小程序导出excel 微信小程序利用第三方库xlsx导出excel&#xff1a; 参考&#xff1a; https://blog.csdn.net/weixin_57263939/article/details/128905216 https://blog.csdn.net/gao511147456/article/details/132009965 另外&#xff1a; 微信小程序中pdf的上传、下载及…

信息打点web篇---前端js打点

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理前端js代码的打点思路 本文只为学习安全使用&#xff0c;切勿用于非法用途。 一切未授权的渗透行为都是违法的。 前端js打点概念与目的 javascript文件属于前端语言&#xff0c;也就是说他的代码都…

jdk17卸载后换jdk1.8遇到的问题

过程&#xff1a; 1、找到jdk17所在文件夹&#xff0c;将文件夹进行删除。&#xff08;问题就源于此&#xff0c;因为没删干净&#xff09; 2、正常下载jdk1.8&#xff0c;按照网上步骤配置环境变量&#xff0c;这里我参考的文章是&#xff1a; http://t.csdnimg.cn/Svblk …

uni-app上传失败超出文件限制解决方法-分包处理-预加载

分包背景 当你的上传出现一下错误&#xff1a; Error: 系统错误&#xff0c;错误码&#xff1a;80051,source size 2089KB exceed max limit 2MB [20240703 10:53:06][wxbf93dfb6cb3eb8af] [1.06.2405010][win32-x64] 说明你主包太大需要处理了&#xff0c;一下两种方法可以…

WEB攻防【5】——JS项目/Node.js框架安全/识别审计/验证绕过

1、test.php和test.html对比 #知识点&#xff1a; 1、原生JS&开发框架-安全条件 2、常见安全问题-前端验证&未授权 #详细点: 1、什么是Js渗透测试? 在Javascript中也存在变量和函数&#xff0c;当存在可控变量及函数调用即可参数漏洞 JS开发的WEB应用和PHP、java.NET…

交换机的工作原理和工作过程

一、交换机的工作原理 交换机主要工作在OSI模型的第二层&#xff0c;即数据链路层。这意味着它处理的是数据帧&#xff0c;而不是更高层次的报文或更低层次的比特流。它可以将接收到的数据包从源地址直接转发到目标地址&#xff0c;提高了网络传输效率和安全性。 二、交换机的…

udp发送数据如果超过1个mtu时,抓包所遇到的问题记录说明

最近在测试Syslog udp发送相关功能&#xff0c;测试环境是centos udp头部的数据长度是2个字节&#xff0c;最大传输长度理论上是65535&#xff0c;除去头部这些字节&#xff0c;可以大概的说是64k。 写了一个超过64k的数据(随便用了一个7w字节的buffer)发送demo&#xff0c;打…

10 docker 安装 mysql详解

目录 一、安装mysql 1. 镜像获取 2. 简单版 2.1. 使用mysql镜像 2.2. 建库建表插入数据 2.3. 外部win 连接并插入中文数据测试 2.4. 简单版本问题 3. 创建容器-实战版 3.1. 新建容器实列并挂载卷 3.2. 新建my.cnf , 解决中文乱码 3.3. 重启容器验证 3.4. 总结 一、…

NAT地址转换实验,实验超简单

实验拓扑 实验目的 将内网区域&#xff08;灰色区域&#xff09;的地址转换为172.16.1.0 实验过程 配置静态NAT&#xff08;基于接口的静态NAT&#xff09; R1配置 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysname R1 [R1]un in en I…

Java---Mybatis详解二

雄鹰展翅凌空飞&#xff0c; 大江奔流不回头。 壮志未酬心未老&#xff0c; 豪情万丈任遨游。 巍巍高山攀顶峰&#xff0c; 滔滔黄河入海流。 风云变幻凭君舞&#xff0c; 踏遍天涯尽逍遥。 目录 一&#xff0c;环境准备 二&#xff0c;删除 三&#xff0c;删除(预编译SQL) 为什…

深入理解多头注意力机制:原理与应用

深入理解多头注意力机制&#xff1a;原理与应用 在自然语言处理和其他序列建模任务中&#xff0c;注意力机制已经成为一种革命性的技术。尤其是多头注意力&#xff08;Multi-Head Attention&#xff09;机制&#xff0c;在Transformer模型中的广泛应用&#xff0c;显著提高了各…

Day04-jenkins-docker

Day04-jenkins-docker 9. 案例06: 基于docker的案例实现静态代码9.1 整体流程9.2 步骤与环境1) 步骤2) 环境 9.3 详细步骤1&#xff09;代码准备2&#xff09;书写dockerfile3&#xff09;准备私有仓库4&#xff09;创建jenkins任务5&#xff09;web节点上启动对应的docker容器…

笛卡尔乘积算法js实现

全因子实验设计( DOE) &#xff1a;指所有因子的所有水平的所有组合都至少进行一次实验&#xff0c;可以估计所有的主效应和所有的各阶交互效应。 笛卡尔乘积&#xff1a;指在数学中&#xff0c;两个集合X和Y的笛卡尔积&#xff08;Cartesian product&#xff09;&#xff0c;…

单片机软件架构连载(3)-typedef

今天给大家讲typedef&#xff0c;这个关键字在实际产品开发中&#xff0c;也是海量应用。 技术涉及知识点比较多&#xff0c;有些并不常用&#xff0c;我们以贴近实际为原则&#xff0c;让大家把学习时间都花在重点上。 1.typedef的概念 typedef 是 C 语言中的一个关键字&…

Firewalld防火墙基础

Firewalld概述 firewalld简介 firewalld 的作用是为包过滤机制提供匹配规则(或称为策略)&#xff0c;通过各种不同的规则告诉netfilter对来自指定源,前往指定目的或具有某些协议特征的数据包采取何种处理方式。为了更加方便地组织和管理防火墙,firewald 提供了支持网络区域所…

卷积层里的多输入多输出

一、定义 1、黑白图片通道为一&#xff0c;彩色图片通道为3 2、多个输入通道&#xff1a;每个通道都有一个卷积核&#xff0c;结果是所有通道卷积结果的和 3、多输入通道 c是channel&#xff0c;每个通道都有一个偏移&#xff0c;是长为i的向量&#xff0c;相应的卷积核也会变…

Ubuntu + SSH密钥连接服务器

1. 下载VS code cd到下载文件夹后&#xff0c;使用命令安装&#xff0c;把xxx复制为文件名 sudo dpkg -i xxx.deb2. 为VSCode换皮肤 3. 下载SSH插件和Docker插件 4. 配置SSH 把密钥key文件放在/home/your_user_name/.ssh/里面&#xff0c;然后在/home/your_user_name/.ssh/c…

机器学习-sklearn学习笔记(一)

好久没有写文章了。现在开始再次捡起机器学习的内容&#xff0c;需要开始写自己的学习笔记。考虑到最近的一项工作&#xff0c;可能需要用到sklearn&#xff0c;为了更好的记录学习心路历程&#xff0c;特此作此笔记。本文参考了知乎Native8418的文章&#xff0c;再次先致谢&am…

selenium4如何指定chrome和firefox的驱动(driver)路径

pythonpytestselenium框架的自动化测试脚本。 原本用的chrome&#xff0c;很久没用了&#xff0c;今天执行&#xff0c;发现chrome偷偷升级&#xff0c;我的chromedriver版本不对了。。。鉴于访问chrome相关网站太艰难&#xff0c;决定弃用chrome&#xff0c;改用firefox。因为…