开源
Fabric.js:帮助开发人员创建图形和交互式应用程序的Canvas库
来源:元经纪     阅读:1204
网站管理员
发布于 2023-06-19 09:54
查看主页

概述

Fabric.js是一个流行的Canvas库,可以帮助开发人员创建各种复杂的图形和交互式应用程序。它提供了许多有用的功能和特性,如对象操纵、事件处理、过滤器等。
Fabric.js的主要特点:
  1. 对象操纵:Fabric.js提供了一组易于使用的API和工具,使得开发人员可以轻松创建、移动、缩放、旋转和删除各种图形对象,如线条、文本、图片等。
  2. 事件处理:Fabric.js支持各种鼠标和键盘事件,如单击、双击、拖动、缩放等。开发人员可以根据实际需求自定义事件处理函数,并添加到图形对象上。
  3. 过滤器效果:Fabric.js支持多种过滤器效果,如模糊、灰度、反色、阴影等,可以帮助开发人员创建更加丰富的图形和动画效果。
  4. SVG导入和导出:Fabric.js支持将SVG文件导入为Canvas对象,并可以将Canvas对象导出为SVG格式,方便开发人员进行跨平台数据共享和交互。
  5. 多平台支持:Fabric.js可以在所有现代浏览器上运行,包括桌面浏览器、移动设备浏览器和平板电脑浏览器等,因此可以满足不同平台和设备的需求。
Fabric.js是一个功能强大、易于使用的Canvas库,可以帮助开发人员创建各种复杂的图形和交互式应用程序。它具有对象操纵、事件处理、过滤器效果、SVG导入和导出、多平台支持等特点,非常适合用于游戏、数据可视化、艺术作品等领域的开发。

[hidecontent type="logged" desc="隐藏内容:登录后可查看"]

支持的浏览器/环境

Context Supported Version Notes
Firefox ✔️ modern version (tbd)
Safari ✔️ version >= 10.1
Opera ✔️ chromium based
Chrome ✔️ modern version (tbd)
Edge ✔️ chromium based
Edge Legacy
IE11
Node.js ✔️ Node.js installation

Fabric.js 默认不使用转译,我们支持的浏览器版本取决于我们要使用的canvas api的级别和一些js语法。虽然 JS 可以很容易地转换,但画布 API 不能。

迁移到 v6

v6 是一项重大工作,包括迁移到 TS 和 es6、无数修复、重写和功能。 目前处于测试阶段,请参阅#8299获取指导。

$ npm install fabric@beta --save
// or
$ yarn add fabric@beta

安装

$ npm install fabric --save
// or
$ yarn add fabric

请参阅浏览器模块以在浏览器中使用 es6 导入或使用专用的捆绑器。

节点.js

Fabric.js 依赖于node-canvas的画布实现(HTMLCanvasElement替换)和jsdomwindow的节点实现。这意味着您可能会遇到node-canvas限制和错误

按照这些说明启动node-canvas并运行。

快速开始

// v6
import { Canvas, Rect } from 'fabric'; // browser
import { StaticCanvas, Rect } from 'fabric/node'; // node

// v5
import { fabric } from 'fabric';
纯 HTML
<canvas id="canvas" width="300" height="300"></canvas>

<script src="https://cdn.jsdelivr.net/npm/fabric"></script>
<script>
  const canvas = new fabric.Canvas('canvas');
  const rect = new fabric.Rect({
    top: 100,
    left: 100,
    width: 60,
    height: 70,
    fill: 'red',
  });
  canvas.add(rect);
</script>
 
响应式JS
import React, { useEffect, useRef } from 'react';
import * as fabric from 'fabric'; // v6
import { fabric } from 'fabric'; // v5

export const FabricJSCanvas = () => {
  const canvasEl = useRef<HTMLCanvasElement>(null);
  useEffect(() => {
    const options = { ... };
    const canvas = new fabric.Canvas(canvasEl.current, options);
    // make the fabric.Canvas instance available to your app
    updateCanvasContext(canvas);
    return () => {
      updateCanvasContext(null);
      canvas.dispose();
    }
  }, []);

  return <canvas width="300" height="300" ref={canvasEl}/>;
};
 
节点.js
import http from 'http';
import * as fabric from 'fabric/node'; // v6
import { fabric } from 'fabric'; // v5

const port = 8080;

http
  .createServer((req, res) => {
    const canvas = new fabric.Canvas(null, { width: 100, height: 100 });
    const rect = new fabric.Rect({ width: 20, height: 50, fill: '#ff0000' });
    const text = new fabric.Text('fabric.js', { fill: 'blue', fontSize: 24 });
    canvas.add(rect, text);
    canvas.renderAll();
    if (req.url === '/download') {
      res.setHeader('Content-Type', 'image/png');
      res.setHeader('Content-Disposition', 'attachment; filename="fabric.png"');
      canvas.createPNGStream().pipe(res);
    } else if (req.url === '/view') {
      canvas.createPNGStream().pipe(res);
    } else {
      const imageData = canvas.toDataURL();
      res.writeHead(200, '', { 'Content-Type': 'text/html' });
      res.write(`<img src="${imageData}" />`);
      res.end();
    }
  })
  .listen(port, (err) => {
    if (err) throw err;
    console.log(
      `> Ready on http://localhost:${port}, http://localhost:${port}/view, http://localhost:${port}/download`
    );
  });
查看即用型模板

更多资源

[/hidecontent]

 
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
管好AI宜向大数据取经
“大模型+教育”走热,多家科技公司跑步入局
人民日报|江苏江阴深化基础研究领域合作 以科技创新驱动产业发展
京东又涨工资了:达达员工今年升至19薪 明年20薪 还送股票
“智造”显身手 高效稳生产

首页

分类

定制方案

消息

我的