图片标注编辑平台搭建系列教程(2)——fabric.js简介
温馨提示:这篇文章已超过409天没有更新,请注意相关的内容是否还可用!
文章目录
- 综述
- 数据管理
- 图形渲染
- 图形编辑
- 事件监听
- 预告
综述
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); })可以监听整个画布的鼠标事件,以及一些抽象后的事件。
预告
下一章,讲讲图片标注中,画布的拖拽、缩放涉及的坐标系相关知识。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
