当前位置: 首页 > news >正文

图片标注编辑平台搭建系列教程(2)——fabric.js简介

文章目录

  • 综述
  • 数据管理
  • 图形渲染
  • 图形编辑
  • 事件监听
  • 预告

综述

fabric提供了二维图形编辑需要的所有基础能力,包括:数据管理、图形渲染、图形编辑和事件监听。其中,图形编辑可以通过事件监听和图形渲染来实现,所以可以弃用。数据管理方便对业务数据做定制化管理。

数据管理

fabric提供了数据管理能力,能很方便地存取图形数据。
代码如下:

var canvas = new fabric.Canvas('a');
var rect = new fabric.Rect();// 新增object
canvas.add(rect);
// 按索引取object
canvas.item(0);
// 获取指定type的object
canvas.getObjects(type);
// 移除object
canvas.remove(rect);
// 遍历对象
canvas.forEachObject(callback);

图形渲染

fabric原生支持部分图形的渲染,Rect、Circle、Triangle、Polyline、Polygon、Point、Path、Text、Object等。通过这些类,你可以很方便地构建出对应的图形。
代码如下:

var circle = new fabric.Circle({ radius: 20, fill: 'green', left: 100, top: 100 });
var triangle = new fabric.Triangle({ width: 20, height: 30, fill: 'blue', left: 50, top: 50 });canvas.add(circle, triangle);// 设置背景图
canvas.setBackgroundImage('../assets/pug.jpg');// 获取样式
circle.get('fill'); // 'green'// 单独设置样式
circle.set('fill', 'blue');
circle.set('opacity', 0.7);
circle.set('stroke', 'red');
circle.set('strokeWidth', 5);// 批量设置样式
circle.set({ fill: 'yellow', opacity: 0.5 });// 触发重新渲染
canvas.renderAll();// 渲染并初始化图形
canvas.renderAndReset();// 选中object
canvas.setActiveObject(circle);// 添加文字标注
var text = new fabric.Text('hello world', { left: 100, top: 100, fill: 'blue', fontSize: 12 });canvas.add(text);

图形编辑

fabric原生支持了图形的编辑,例如平移、旋转和缩放。不过扩展性不强,本人不喜欢使用,禁用也很简单,如下。
用法如下:

circle.set({lockMovementX: true, // 禁止横向移动lockMovementY: true, // 禁止纵向移动lockRotation: true, // 禁止旋转lockScalingX: true, // 禁止横向缩放lockScalingY: true, // 禁止纵向缩放
});

事件监听

要想编辑功能强大,事件监听必不可少。fabric提供了很底层的事件监听,写法简单,如下:

// 鼠标事件
const mouseEvents = ['mouse:down', 'mouse:move', 'mouse:up']// 渲染事件
const renderEvents = ['after:render']// 选中事件
const selectEvents = ['selection:cleared', 'selection:created', 'selection:updated']// 对象事件
const objectEvents = ['modified', 'selected', 'added', 'removed', 'moving', 'scaling', 'rotating', 'resizing']canvas.on('mouse:down', (options) => { console.log(options.e.clientX, options.e.clientY); });canvas.on('selection:created', (options) => { console.log(options.selected); });canvas.on('object:added', (options) => { console.log(options.target); })

可以监听整个画布的鼠标事件,以及一些抽象后的事件。

预告

下一章,讲讲图片标注中,画布的拖拽、缩放涉及的坐标系相关知识。

相关文章:

  • CKS之安全沙箱运行容器:gVisor
  • JUC:线程活跃性(死锁、活锁、饥饿)
  • Python下载bing每日壁纸并实现win11 壁纸自动切换
  • MySQL详细教程
  • 从头搭建GPT(Andrej Karpathy) 笔记
  • Vue中的MVVM
  • Jenkins磁盘空间批量清理脚本
  • 如何在Windows 10中打开屏幕键盘?这里有详细步骤
  • css的各种样式
  • Axure中后台系统原型模板,B端页面设计实例,高保真高交互54页
  • Flink SQL 基于Update流出现空值无法过滤问题
  • FreeRTOS从代码层面进行原理分析(5 对实时性的探究)
  • Kafka硬核干货
  • macos下 jupyter服务安装和vscode链接密码设置 .ipynb文件
  • 2024年03月CCF-GESP编程能力等级认证C++编程四级真题解析
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • FastReport在线报表设计器工作原理
  • Netty 4.1 源代码学习:线程模型
  • PHP 小技巧
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 订阅Forge Viewer所有的事件
  • 观察者模式实现非直接耦合
  • 基于web的全景—— Pannellum小试
  • 实现简单的正则表达式引擎
  • 新书推荐|Windows黑客编程技术详解
  • gunicorn工作原理
  • Hibernate主键生成策略及选择
  • Java数据解析之JSON
  • 说说我为什么看好Spring Cloud Alibaba
  • #WEB前端(HTML属性)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (定时器/计数器)中断系统(详解与使用)
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (多级缓存)多级缓存
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET应用架构设计:原则、模式与实践 目录预览
  • /*在DataTable中更新、删除数据*/
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [CISCN2019 华北赛区 Day1 Web2]ikun
  • [c语言]小课堂 day2
  • [Docker]十.Docker Swarm讲解
  • [Effective C++读书笔记]0012_复制对象时勿忘其每一部分
  • [HDOJ4911]Inversion
  • [hdu 2826] The troubles of lmy [简单计算几何 - 相似]
  • [HDU3710]Battle over Cities