fabric.js

fabric.js

功能丰富的JavaScript Canvas图形处理库

Fabric.js是一个JavaScript Canvas库,用于交互式图形处理。它内置缩放、移动、旋转等功能,支持多种形状、控件、动画和滤镜。该库可处理JPG、PNG、JSON和SVG格式,提供类型化和模块化API。Fabric.js兼容主流浏览器和Node.js环境,是一个功能全面的Canvas图形处理工具。

Fabric.jsHTML5画布库JavaScript库交互式图形开源项目Github

Fabric.js

<a href="http://fabricjs.com/kitchensink" target="_blank"><img align="right" src="https://yellow-cdn.veclightyear.com/835a84d5/3c665f68-7587-4788-8505-80ecf95af21d.png" style="width:400px"></a>

一个简单而强大的Javascript HTML5 canvas库


<!-- 构建/覆盖状态、气候 -->

🩺 🧪 CodeQL


<!-- npm、bower、CDNJS版本、下载量 -->

[cdnjs][cdnjs] [jsdelivr][jsdelivr] Gitpod Ready-to-Code

NPM 每月下载量 Bower


赞助 asturur 赞助 melchiar 赞助 ShaMan123 Patreon


特性

  • 开箱即用的交互功能,如缩放、移动、旋转、倾斜、分组等...
  • 内置形状、控件、动画、图像滤镜、渐变、图案、画笔...
  • JPGPNGJSONSVG输入/输出
  • 类型化和模块化
  • 单元测试

支持的浏览器/环境

环境支持的版本注释
Firefox✔️58
Safari✔️11
Opera✔️基于Chromium
Chrome✔️64
Edge✔️基于Chromium
Edge Legacy
IE11
Node.js✔️Node.js 安装

Fabric.js默认不使用转译,我们支持的浏览器版本由我们想要使用的canvas API级别和一些JS语法决定。虽然JS可以轻松转译,但canvas API无法转译。

安装

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

浏览器

[cdnjs][cdnjs] [jsdelivr][jsdelivr]

请参阅[浏览器模块][mdn_es6]以了解如何在浏览器中使用es6导入,或使用专用的打包工具。

Node.js

Fabric.js依赖[node-canvas][node_canvas]作为canvas实现(HTMLCanvasElement的替代品)和[jsdom][jsdom]作为node上的window实现。 这意味着你可能会遇到node-canvas的限制和[bugs][node_canvas_issues]。

按照这些[说明][node_canvas_install]来设置和运行node-canvas

快速开始

// v6 import { Canvas, Rect } from 'fabric'; // 浏览器 import { StaticCanvas, Rect } from 'fabric/node'; // node // v5 import { fabric } from 'fabric';
<details><summary><b>普通HTML</b></summary>
<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>
</details> <details><summary><b>ReactJS</b></summary>
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); // 使fabric.Canvas实例在你的应用中可用 updateCanvasContext(canvas); return () => { updateCanvasContext(null); canvas.dispose(); } }, []); return <canvas width="300" height="300" ref={canvasEl}/>; };
</details> <details><summary><b>Node.js</b></summary>
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="https://raw.githubusercontent.com/fabricjs/fabric.js/master/${imageData}" />`); res.end(); } }) .listen(port, (err) => { if (err) throw err; console.log( `> 已在 http://localhost:${port}、http://localhost:${port}/view 和 http://localhost:${port}/download 上准备就绪`, ); });
</details>

查看我们现成可用的模板


其他解决方案

项目描述
[Three.js][three.js]3D 图形
[PixiJS][pixijs]WebGL 渲染器
[Konva][konva]类似功能
[html-to-image][html-to-image]HTML 转图像/画布

更多资源

  • 正在开发中的新 fabricjs.com 网站
  • [fabricjs.com 上的演示][demos]
  • [Fabric.js 的 Twitter 账号][twitter]
  • [Fabric.js 的 CodeTriage 页面][code_triage]
  • [Fabric.js 在 Stack Overflow 上的标签][so]
  • [Fabric.js 在 jsfiddle 上的示例][jsfiddles]
  • [Fabric.js 在 Codepen.io 上的示例][codepens]

致谢 Patreon

  • [kangax][kagnax]
  • [asturur][asturur] 的 [Twitter 账号][asturur_twitter] 赞助 asturur
  • [ShaMan123][shaman123] 赞助 ShaMan123
  • [melchiar][melchiar] 赞助 melchiar
  • Ernest Delgado 提出的在画布上操作图像的原始想法
  • Maxim "hakunin" Chernyak 在库的整个生命周期中提供的想法和对各个部分的帮助
  • Sergey Nisnevich 在几何逻辑方面的帮助
  • Stefan Kienzle 在修复错误、添加功能、编写文档和处理 GitHub 问题方面的帮助
  • Shutterstock 为使用和改进 Fabric.js 投入的时间和资源
  • [以及所有其他贡献者][contributors]

编辑推荐精选

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

下拉加载更多