Fabric.js:如何填充徒手路径来绘制形状?

2024-01-13

在fabric.js中,我们可以徒手绘制路径(例如http://fabricjs.com/freedrawing http://fabricjs.com/freedrawing).

但是,在 HTML canvas 2d-context ctx 中,我也可以绘制一条路径,然后调用

ctx.fill()

填充路径并从路径中制作填充形状。

示例代码:每当鼠标抬起时,路径就会被填充。

function draw() {

ctx.lineCap = "round";
ctx.globalAlpha = 1;

var x = null;
var y = null;

canvas.onmousedown = function (e) {

    // begin a new path
    ctx.beginPath();

    // move to mouse cursor coordinates
    var rect = canvas.getBoundingClientRect();
    x = e.clientX - rect.left;
    y = e.clientY - rect.top;
    ctx.moveTo(x, y);

    // draw a dot
    ctx.lineTo(x+0.4, y+0.4);
    ctx.stroke();
};

canvas.onmouseup = function (e) {
    x = null;
    y = null;
    ctx.fill();
};

canvas.onmousemove = function (e) {
    if (x === null || y === null) {
        return;
    }
    var rect = canvas.getBoundingClientRect();
    x = e.clientX - rect.left;
    y = e.clientY - rect.top;
    ctx.lineTo(x, y);
    ctx.stroke();
    ctx.moveTo(x, y);
}

}

Fabricjs 也可以实现类似的行为吗?

Fabricjs似乎只保存路径,不保存填充区域。

谢谢, 彼得


在织物中绘图会生成一堆路径对象,您可以像大多数其他织物对象一样向它们添加填充。下面是一个示例脚本,它将在鼠标松开时自动将每个创建的对象设置为蓝色背景:

var canvas = new fabric.Canvas('c', {
    isDrawingMode: true
 });

canvas.on('mouse:up', function() {
  canvas.getObjects().forEach(o => {
    o.fill = 'blue'
  });
  canvas.renderAll();
})
canvas {
    border: 1px solid #ccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.3/fabric.js"></script>

<canvas id="c" width="600" height="600"></canvas>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fabric.js:如何填充徒手路径来绘制形状? 的相关文章

随机推荐

  • Gulp + babelify + browserify 问题

    我正在尝试使用 browserify 和 babelify 创建一个 gulp 任务 这是任务 var gulp require gulp var browserify require gulp browserify var source
  • 根据列值连接不同的表

    我有一个表R 其中包含表P的外键 在表P中有一列 告诉我表P中的记录是什么类型 与 P type 列中的可能值相关 根据表存在 因此 如果 P type 中的值为 C 则表示名为 C 的表 如果值为 D 则表示名为 D 的表 现在我想要一个
  • 文件的 listFiles() 不适用于符号链接?

    我有以下文件对象通过符号链接指向目录 File directory new File path symlink foo bar String files directory listFiles listFiles 返回 null 这是因为符
  • 如何循环加载所有用户的注册表配置单元

    使用管理员权限 我需要枚举 Windows 7 系统上的所有用户 甚至是已注销的用户 然后我需要为每个用户加载注册表配置单元并设置一个密钥 NetUserEnum 给我 SID 我猜 LsaEnumerateLogonSessions 也会
  • 在 Windows 上我应该将 Eclipse 安装到哪个文件夹?

    我运行的是 Windows 7启用UAC 我一直觉得很奇怪Eclipse http www eclipse org 不使用安装程序 也不使用 AppData 文件夹在 Windows 中存储其数据 但最近我不得不重新安装几次 硬盘驱动器问题
  • Python tkinter 文本修改回调

    在 python 2 7 中 每次 Tkinter Text 小部件中发生更改时 我都尝试获取回调 该程序使用基于此处找到的代码的多个框架 在 tkinter 中的两个框架之间切换 https stackoverflow com quest
  • wpf:获取组合框值

    我有一个名为 cbFileSize 的 WPF 组合框 我尝试获取所选值 如下所示 string tmp cbFileSize SelectedValue ToString MessageBox Show tmp 但 tmp 设置为 Sys
  • 无法加载数据源的类:com.databricks.spark.csv

    My build sbt文件有这个 scalaVersion 2 10 3 libraryDependencies com databricks spark csv 2 10 1 1 0 我正在独立集群模式下运行 Spark 我的 Spar
  • 有条件地应用 Angular 4 中的点击事件

    是否可以在模板中定义一个附加点击处理程序的条件 例如 我能得到的最接近的是评估单击方法入口处的条件 a class user a 如果标志有的话 有没有一种方法可以避免完全绑定到单击事件isOverflown是假的吗 另外 我不想使用ng
  • 使用 Maven 打包并运行 Scala Spark 项目

    我正在 Scala 中编写一个应用程序 它使用Spark http spark apache org 我正在使用 Maven 打包应用程序 并在构建应用程序时遇到问题 uber 或 fat 罐子 https stackoverflow co
  • 在后台处理ViewExpiredException并恢复表单值

    是否有一个无数据库 primefaces 和 keep session alive 的解决方案来防止或在恢复表单输入时在后台静默处理 ViewExpiredException 例如 具有 保持登录 cookie 的用户不希望被重定向到某种错
  • 在 R 中执行时间序列的 fft

    我想使用 FFT 将波拟合到时间序列 目标是绘制具有不同谐波的图 并用它来预测 n 个数据点 我正在使用的代码基于此answer https stackoverflow com questions 41435777 perform four
  • 非本机长度的有符号和无符号整数的性能差异

    有这样一段话 CppCon 2016 钱德勒 卡鲁斯 Chandler Carruth 垃圾进 垃圾出 争论未定义的行为 https youtu be yG1OZ69H o t 39m16s 其中 Carruth 先生展示了 bzip 代码
  • Angular UI 路由器无法使用 Internet Explorer 9 进行解析

    我有一个 Angular v1 3 应用程序 它使用 Angular ui router v0 2 13 进行所有路由 该网站在所有浏览器上都能正常运行 包括 IE 10 和 IE 11 但不能在 IE 9 上运行 我们决定不再使用 IE8
  • 带箭头顶部和边框的框

    我只是要在上面创建一个盒子 边缘有一个箭头 我经常尝试但不幸的是相关的解决方案 我自然而然地在网上和网站上查询 但遗憾的是没有成功 所以它应该照顾 箭头应具有与框相同的边框和相同的背景颜色 所以现在看起来 arrow up width 10
  • Xcode 4 对当前版本的 MonoTouch 有影响吗?

    安装 Xcode 4 安全吗 今天发布的 MonoTouch 将允许您安装 XCode 4 并继续使用 MonoTouch 构建应用程序 但如果您使用安装 XCode 4 您将无法编辑 XIB 文件 我们建议开发人员安装新的 XCode 3
  • 具有类继承的数据类字典

    我有以下课程 dataclass json dataclass class Input sources List Sources None Transformations List str None 也 dataclass json dat
  • 如何使用mutationobserver代替突变事件?

    我正在尝试使用 D3 js 创建我的第一个流图 我从一个工作示例开始 其中包含在线发布的代码中的工具提示 http bl ocks org WillTurman 4631136 http bl ocks org WillTurman 463
  • 设置电子邮件和浏览器的 tr 和 td 宽度和高度

    我正在制作 HTML 电子邮件 我想在发送之前在浏览器中预览它们 因此我希望它们在浏览器和电子邮件客户端中看起来相似 我尝试了多种方法来设置行和单元格的宽度和高度 table height 500 width 200 tr td heigh
  • Fabric.js:如何填充徒手路径来绘制形状?

    在fabric js中 我们可以徒手绘制路径 例如http fabricjs com freedrawing http fabricjs com freedrawing 但是 在 HTML canvas 2d context ctx 中 我