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

2024-03-27 1383阅读

温馨提示:这篇文章已超过409天没有更新,请注意相关的内容是否还可用!

文章目录

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

    综述

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

    图片标注编辑平台搭建系列教程(2)——fabric.js简介
    (图片来源网络,侵删)

    数据管理

    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); })
    

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

    预告

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

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]