图片标注编辑平台搭建系列教程(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); })

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

预告

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

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HouGISer

HouGiser需要你的鼓励~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值