2.21.0 • Published 1 day ago

canvas-select v2.21.0

Weekly downloads
65
License
MIT
Repository
github
Last release
1 day ago

canvas-select

一个用于图片标注的 javascript 库,基于 canvas,简单轻量,支持矩形、多边形、点、折线、圆形标注。

A lightweight image annotation javascript library that supports rectangles, polygons, points, polylines, circles, and re-editing, making image annotation easier.

NPM version NPM downloads

查看示例 👉 demo

图例

简介

  • 支持矩形标注、多边形标注、点标注、折线标注、圆形标注。

  • 支持拖拽、缩放。

  • 支持控制点编辑。

  • 支持全局样式设置,单个形状样式设置。

  • 支持添加、编辑标签。

  • 支持桌面端和移动端。

  • 每个形状有唯一 uuid,没有则自动生成。

使用

  • 设置 instance.createType 指定需要创建形状类型,不创建时需要设置为 0。

  • 创建矩形时,按住鼠标左键拖动完成创建。

  • 创建多边形或折线时,鼠标左键单击添加点,闭合或者双击完成创建,Escape退出创建,Backspace退一步删除选择点。

  • 创建点时,鼠标左键点击完成创建。

  • 创建圆时,按住鼠标左键拖动完成创建。

  • 按住鼠标右键拖动画布。

  • 按住Control键拖动形状。

  • 鼠标滚轮缩放画布。

  • 选中形状,Backspace删除。

  • 通过 instance.dataset或者监听updated事件回调参数查看标注结果。

支持 UMD 模块规范

<script src="https://unpkg.com/canvas-select@^2/lib/canvas-select.min.js"></script>
npm install canvas-select --save
<canvas class="container"></canvas>
// 创建实例(重要:一定要等到挂载节点就绪)
// 第一个参数为挂载节点 可以是css选择器或者HTMLCanvasElement
// 第二个参数为图片链接
const instance = new CanvasSelect(".container", "/one.jpg");
// or
// const instance = new CanvasSelect('.container');
// instance.setImage('/one.jpg');

let option = [
  {
    label: "rectangle",
    labelFillStyle: "#f00",
    textFillStyle: "#fff",
    coor: [
      [184, 183],
      [275, 238],
    ], // required
    type: 1, // required
  },
  {
    label: "polygon",
    coor: [
      [135, 291],
      [129, 319],
      [146, 346],
      [174, 365],
      [214, 362],
      [196, 337],
      [161, 288],
    ], // required
    type: 2, // required
  },
  {
    label: "dot",
    coor: [345, 406], // required
    type: 3, // required
  },
  {
    label: "line",
    coor: [
      [470, 155],
      [490, 230],
      [493, 298],
    ], // required
    type: 4, // required
  },
  {
    label: "circle",
    coor: [369, 197], // required
    radius: 38, // required
    type: 5, // required
  },
];
// 加载数据
instance.setData(option);
// 0 不创建(默认),1创建矩形,2创建多边形,3点标注,4折线标注,5圆形标注
instance.createType = 1;
instance.on("select", (info) => {
  console.log("select", info);
  // 可对选中对参数info进行修改
  // 修改标签:info.label="hello"
  // 单个形状修改填充颜色:info.fillStyle="#0f0"
  // 然后调用instance.update()更新视图
});

实例属性

对任意属性的修改都需要调用instance.update()更新视图

属性名称类型默认值单个形状属性修改说明
createTypeboolean00 不创建(拖拽),1 创建矩形,2 多边形,3 点,4 折线,5 圆
lockbooleanfalse锁定画布
readonlybooleanfalse仅查看
scrollZoombooleantrue滚动缩放
MIN_WIDTHnumber10最小矩形宽度
MIN_HEIGHTnumber10最小矩形高度
MIN_RADIUSnumber5最小圆形半径
strokeStylestring#0f0支持形状边线颜色
lineWidthnumber1支持形状边线宽度
fillStylestringrgba(0, 0, 255,0.1)支持形状填充颜色
activeStrokeStylestring#f00选中的形状边线颜色
activeFillStylestring#f00选中的形状填充颜色
ctrlStrokeStylestring#000控制点边线颜色
ctrlFillStylestring#fff控制点填充颜色
ctrlRadiusnumber3控制点半径
hidebooleanfalse支持是否在画布中显示指定标注
labelstring标签名称
hideLabelbooleafalse支持是否隐藏标签名称
labelUpbooleanfalse支持label 是否在上方
labelFillStylestring#fff支持label 填充颜色
labelFontstring10px sans-serif支持label 字体
textFillStylestring#000支持label 文字颜色
labelMaxLennumber10label 字符最大显示个数,超出字符将用...表示
alphabooleantrue设置为 false 可以帮助浏览器进行内部优化
focusModebooleanfalse专注模式,开启后只有活动状态的标签会显示到画布中

实例方法

方法名称参数类型说明
setImagestring添加/切换图片
setDataArray\<Shape>加载初始数据
setScalebooleantrue 放大画布,false 缩小画布
fitZoom适配图片到画布 (contain)
update更新画布, 修改实例属性后要执行此方法
deleteByIndexnumber根据索引删除形状
setFocusModeboolean设置专注模式
onstring,function监听事件
resize重新设置画布大小
destroy销毁实例

事件

事件名称回调参数说明
selectinfo 选中的数据选择标注
addinfo 添加的数据添加
deleteinfo 删除的数据删除
updatedresult 全部标注结果画布更新
loadimg 图片链接图片加载完成
warnmsg 警告信息警告

注意事项

  1. 不要在 canvas 标签上设置 style,推荐使用 css。

  2. 如果使用框架,请在生命周期加载完成之后创建实例。

2.21.0

1 day ago

2.20.0

19 days ago

2.19.1

2 months ago

2.19.0

4 months ago

2.18.1-beta.1

5 months ago

2.17.0

6 months ago

2.15.2

7 months ago

2.15.0

9 months ago

2.15.1

8 months ago

2.15.0-beta.2

10 months ago

2.15.0-beta.1

10 months ago

2.15.0-beta.3

10 months ago

2.16.1

6 months ago

2.18.0

5 months ago

2.14.1

10 months ago

2.16.0

6 months ago

2.14.0

11 months ago

2.13.3

11 months ago

2.13.2

1 year ago

2.13.0

1 year ago

2.13.1

1 year ago

2.12.1

1 year ago

2.12.0

1 year ago

2.11.0

1 year ago

2.10.0

1 year ago

2.9.0

1 year ago

2.9.2

1 year ago

2.9.1

1 year ago

2.8.0

1 year ago

2.7.2

1 year ago

2.7.0

1 year ago

2.7.1

1 year ago

2.7.0-beta.1

1 year ago

2.6.0

1 year ago

2.5.0

1 year ago

2.6.0-beta.1

1 year ago

2.5.0-beta.1

1 year ago

2.4.0

1 year ago

2.4.0-beta.7

1 year ago

2.4.0-beta.4

1 year ago

2.4.0-beta.3

1 year ago

2.4.0-beta.6

1 year ago

2.4.0-beta.5

1 year ago

2.4.0-beta.2

1 year ago

2.4.0-beta.1

1 year ago

2.3.4

2 years ago

2.3.3

2 years ago

2.3.0

2 years ago

2.2.0

2 years ago

2.3.2

2 years ago

2.3.1

2 years ago

2.1.5

3 years ago

2.1.4

3 years ago

2.1.3

3 years ago

2.1.2

3 years ago

2.1.1

3 years ago

2.1.0

3 years ago

2.0.3

3 years ago

2.0.2

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.1.0

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago