Annotorious.js 入门教程:图片注释工具

news2024/11/23 3:05:00

theme: smartblue

本文简介

【今天我必须发一个封面!放文末!】

最近有工友问我前端怎么给图片做标注。使用 Fabric.js 或者 Konva.js 等库确实可以实现,但多少觉得有点大炮打蚊的感觉,好奇有没有专门做图片标注的工具呢?

在网上搜了一下发现 Annotorious 可以实现这个功能。Annotorious 提供了图片注释和标注功能,而且用法很简单。

01.gif


本文分为 【快速入门】和【API讲解】两部分。

【快速入门】部分包含 Annotorious 的安装、使用、导入导出的讲解。这几点应该是项目中比较核心的流程,给希望快速入门的工友提供一丢丢帮助。

【API讲解】这部分主要讲一下我认为比较常用的功能。注意:是“我认为”。

快速入门

快速入门部分会讲解Annotorious 的安装、使用、导入和导出数据功能。

安装 Annotorious

CDN

```html rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@recogito/annotorious@2.7.10/dist/annotorious.min.css">


### NPM 用以下命令安装 `Annotorious` npm install @recogito/annotorious 然后在项目中引入 ```js import { Annotorious } from '@recogito/annotorious' import '@recogito/annotorious/dist/annotorious.min.css' ```
## 使用 annotorious 把 `Annotorious` 安装到项目后就可以使用了。 `Annotorious` 的用法很简单,只需做以下2步: 1. 在html部分插入图片 2. 初始化 `Annotorious`,并绑定图片元素(元素的ID或者元素本身)
![01.gif](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f131b6e44fda4616b94f3e7aa96665d4~tplv-k3u1fbpfcp-watermark.image?)
`CDN` 和 `NPM` 在初始化时的用法稍微有点不同。 ### CDN ```html

```

使用 CDN 的方式引入 Annotorious,在初始化时要 Annotorious.init 这样写。

NPM

```html

```

使用 NPM 的方式引入 Annotorious 在初始化时需要 new Annotorious 这样写。

注意:在 Annotorious 初始化代码最好放在你所使用的框架的页面加载完成后的生命周期函数里!

导出数据 getAnnotations()

如果你需要将图片上的标注保存到服务器,就需要把数据导出。

所用到的方法是 getAnnotations()

02.png

```html

```

导入数据 loadAnnotations(url)

Annotorious 可以通过 loadAnnotations() 方法加载数据。

loadAnnotations(url) 支持传入一个 URL 参数,这个 URL 所指的是数据文件地址。

比如我在本地创建一个 data.json 文件,文件内容是使用前面讲到的 getAnnotations() 方法导出的数据,我的数据内容如下:

json [ { "@context": "http://www.w3.org/ns/anno.jsonld", "type": "Annotation", "body": [ { "type": "TextualBody", "value": "1", "purpose": "commenting" } ], "target": { "source": "http://127.0.0.1:5500/44.jpg", "selector": { "type": "FragmentSelector", "conformsTo": "http://www.w3.org/TR/media-frags/", "value": "xywh=pixel:100,100,500,300" } }, "id": "#cabe2e71-b19f-4499-80c6-235882fd50ba" } ]

在本地测试时,我使用了本地服务器把 data.json 管理起来,在浏览器可以通过 http://127.0.0.1:5500/data.json 访问到该文件。

然后再使用 loadAnnotations(url) 方法把数据渲染出来即可。

04.png

```html

```

点击加载按钮后,图片上就会出现一个选框,点击选框可以看到数据已经成功加载出来。

添加数据 addAnnotation()

但在实际项目中,后台不一定会给前端返回一个文件地址,后台可能会直接返回一个json数据。

这时候如果使用 loadAnnotations() 方法加载 json 数据是行不通的,要通过遍历读取数据中心的 data 里的数据,然后调用 addAnnotation() 方法将元素添加到页面。

我使用 json-server 简单的在本地搭建一个服务器给前端访问对应的资源,前端用 axios 请求资源。

```html

```

很久之前写过一篇 《『前端必备』本地数据接口 —— json-server 从入门到膨胀》 文章介绍 json-server 的基础用法,有兴趣的工友可以去瞧瞧。

API讲解

这部分主要讲一些我关注到的功能,如果想全面了解 Annotorious 可以查看文档。

汉化 locale

Annotorious 是根据浏览器的设置来确定使用哪种语言。

05.png

如果需要修改 Annotorious 使用的语言,可以在初始化时配置一下 locale 字段。

比如配置简体中文可以用 zh-CN,配置繁体中文可以用 zh-TW

06.png

```html

```

自定义提示文本 messages

如果想自定义按钮或者输入框的提示文本可以配置 messages

```html

```

如果同时配置了 localemessages ,会优先使用 message 的值。

空注释 allowEmpty

默认情况下,如果框选后没输入标签或者评论就按确定是不会保存选框的。

07.gif

如果想保存空选框,可以将 allowEmpty 设置为 true

08.gif

```html

```

框选辅助线 crosshair

有些鼠标指针可能并不是那么标准,会影响你框选的准确性。

如果需要非常准确去框选,可以开启辅助线功能,只需将 crosshair 设置为 true 即可。

09.png

```html

```

只读 readOnly

如果不打算提供框选、添加和删除信息的操作给用户,可以将 readOnly 设置为 true

```html

```

禁止编辑 disableEditor

如果只需要画框框,不需要写注释,可以将 disableEditorallowEmpty 同时设置为 true

10.gif

```html

```

为什么要同时将 allowEmpty 设为 true

因为如果你不允许注释为空的话,当你点击空白处时选框就会消失。

禁止选中选框 disableSelect

disableSelect 设置为 true 后,画布上的选框就无法再次选中了。

```html

```

虽然还没想到有什么引用场景,但还是打算记录一下。

手柄半径 handleRadius

箭头所指的就是手柄。

11.png

手柄的默认半径是6。如果需要修改手柄半径可以设置 handleRadius 属性。

12.png

```html

```

自定义选框样式

Annotorious 的选框和编辑器都是可以使用 css 设置样式的。

选框部分使用了 SVG ,编辑器部分直接用了 HTML 元素。

SVG 不了解的工友可以阅读 《SVG专栏》。

回到 Annotorious ,官方也有给出一个自定义样式的案例 《Customizing Visual Appearance》。

13.png

```html

```

上面这份代码选框的样式是从 Annotorious 官网教程搬过来的。

编辑器的样式我随便配了一下,工友们也可以打开浏览器控制台看 Elements 面板的 HTML 代码,根据结构去修改样式即可。

筛选功能

输入时需要快速添加预选项时,可以这样配置:

14.png

```html

```

多边形选框

使用 setDrawingTool(toolName) 方法可以设置不同的绘制工具。

如果需要讲选框设置成多边形,可以传入 'polygon'

15.png

```html

```

想要知道当前有哪些绘图工具,可以使用 anno.listDrawingTools() 方法查看

16.png

```html

```

其他

除了上面介绍到的 API 外,Annotorious 还有很多玩法的,比如删除指定注释、清空所有注释等。

详情请看 《annotorious API文档》

插件

Annotorious 也有一些好玩的插件,有兴趣的可以看看 《Annotorious 插件推荐》。

推荐阅读

👍《提升日期处理效率:day.js 实战经验分享》

👍《OpenLayers.js 入门教程:打造互动地图的入门指南》

👍《物理世界的互动之旅:Matter.js入门指南》

👍《p5.js 光速入门》

👍《眨个眼就学会了Pixi.js》

👍《Fabric.js 从入门到膨胀》

点赞 + 关注 + 收藏 = 学会了

640.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/847205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指offer(C++)-JZ16:数值的整数次方(算法-位运算)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 实现函数 double Power(double base, int exponent),求base的exponent次方。 注意&#xff1…

stm32项目(5)——基于stm32的工地噪声扬尘检测系统

目录 1.功能设计 2.硬件方案 1.单片机选择 2.声音传感器 3.PM2.5传感器 4.显示器 3.程序设计 4.课题意义 1.功能设计 本次系统实现的功能如下所示: 采用声音传感器检测环境噪音,采用PM2.5传感器检测环境灰尘浓度。若噪声超过阈值或者PM2.5超过阈…

ROS Navigation Stack安装

Navigation导航包是做导航几乎都要用的,大家可以先去ROS Wiki上学习下 我们先Git下对应版本的软件包,我是Kinetic的,所以是Kinetic-devel 下载后发现目录下并没有CMakeLists.txt,所以直接在ROS工作目录下catkin_make并不会产生可…

【FPGA】UART串口通信——奇偶校验实现

文章目录 一、奇偶校验位二、设计思路三、仿真测试 一、奇偶校验位 奇偶校验位是基于uart的数据上进行一个判断 奇校验:数据1个数为奇时,校验为0,反之为1 偶校验:数据0个数为偶时,校验为0,反之为1 Uart…

MySQL 事务原理:事务概述、隔离级别、MVCC

文章目录 一、事务1.1 事务概述1.2 事务控制语句1.3 ACID特性 二、隔离级别2.1 隔离级别的分类2.1.1 读未提交(RU)2.1.2 读已提交(RC)2.1.3 可重复读(RR)2.1.4 串行化 2.2 命令2.3 并发读异常2.3.1 脏读2.3…

Babylon.js着色器简明简称【Shader】

推荐:用 NSDT设计器 快速搭建可编程3D场景 为了生成 BabylonJS 场景,需要用 Javascript 编写代码,BabylonJS 引擎会处理该代码并将结果显示在屏幕上。 场景可以通过改变网格、灯光或摄像机位置来改变。 为了及时显示可能的变化,屏…

借助gopsutil库,获取机器相关信息

使用github.com/shirou/gopsutil/disk这个库,如何获取机器下不同磁盘分区的内容 使用 github.com/shirou/gopsutil/disk 库获取机器下不同磁盘分区的内容,可按如下: import "github.com/shirou/gopsutil/disk"//调用 disk.Partitio…

【瑞吉外卖】Git部分学习

Git简介 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种: 本地仓库:开发人员自己电脑上的Git仓库 远程仓库:远程服务器上的Git仓库…

git原理与使用

目录 引入基本操作分支管理远程操作标签管理 引入 假设你的老板要你设计一个文档,当你设计好了,拿给他看时,他并不是很满意,就要你拿回去修改,你修改完后,再给他看时,他还是不满意,…

ERP、APS、MES 三者之间的关系

ERP(Enterprise Resource Planning) APS(Advanced Planning and Scheduling) MES(Manufacturing Execution System) 这是三种不同类型的软件系统,它们主要用于企业内部管理和自动化运营流程。…

vscode Google代码风格设置无效解决

1. 采用第一个方法设置google代码设置风格 2. 安装了clangd后需要在格式化风格做选择 vscode 安装 clang-format插件 $ code /home/tony/.config/Code/User/settings.json 这就能解决google风格设置无效的问题了,原来根因在于使用的格式化插件没有生效导致&#xf…

还原某里226控制流混淆的思路

原两年前我就写出了还原控制流,由于当时没留笔记,导致现在很多忘记了,只记得大致思路,又由于在面试的时候,很多时候说不清楚,遂直接重构并还原最新版练手 另本文以教学为基准、本文提供的可操作性不得用于…

多用户跨境B2B2C商城后台管理系统快速搭建

搭建一个多用户跨境B2B2C商城后台管理系统需要考虑多个方面,包括系统架构设计、用户权限管理、商品管理、订单管理、支付管理、物流管理等。搭建步骤如下: 1. 系统架构设计 首先,需要设计一个稳定可靠的系统架构。选择一个适合B2B2C商城的商…

【iOS】RunLoop

前言-什么是RunLoop? 什么是RunLoop? 跑圈?字面上理解确实是这样的。 Apple官方文档这样解释RunLoop RunLoop是与线程息息相关的基本结构的一部分。RunLoop是一个调度任务和处理任务的事件循环。RunLoop的目的是为了在有工作的时候让线程忙起来&#…

谈谈对Spring MVC的理解

问题分析: SpringMVC 是一种基于 Java 语言开发,实现了 Web MVC 设计模式,请求驱动类型 的轻量级 Web 框架。 SpringMVC采用了 MVC 架构模式的思想,通过把 Model,View,Controller 分离,将 Web 层…

Kubeadm搭建 Kubernetes

kubeadm搭建整体步骤 1)所有节点进行初始化,安装docker引擎和kubeadm kubelet kubectl 2)生成集群初始化配置文件并进行修改 3)使用kubeadm init根据初始化配置文件生成K8S的master控制管理节点 4)安装CNI网络插件&am…

在centos7下通过docker 安装onlyoffice

因为需要调试网盘,所以今天安装一下centos7的onlyoffice 官方介绍如下: 为了方便,还是通过docker方式来安装onlyoffice了,这里我们采用社区版本了。 1、下载docker安装包 如下: docker pull onlyoffice/documentserv…

Mageia 9 RC1 正式发布,Mandriva Linux 发行版的社区分支

导读Mageia 9 首个 RC 已发布。公告写道,自 2023 年 5 月发布 beta 2 以来,Mageia 团队一直致力于解决许多顽固问题并提供安全修复和新特性。 新版本的控制中心添加了用于删除旧内核的新功能,该功能在 Mageia 9 中默认自动启用,用…

Flowable-网关-事件网关

目录 定义图形标记XML内容使用示例视频教程 定义 通常网关根据连线条件来决定后继路径,但事件网关不同,它提供了根据事件做选择的方式。 事件网关的每个外出顺序流都需要连接至一个捕获中间事件。当流程执行到达事件网关时,网关类 似处于等待…

Elasticsearch——基础(笔记)

文章目录 一、 Elasticsearch二、正向索引与倒排索引三、Elasticsearch与Mysql3.1 文档document3.2 索引库index3.3 与Mysql对比3.4 常见架构 四、部署与分词器4.1 部署单点ES4.2 使用IK分词器4.3 字典词库的拓展 五、操作索引库5.1 创建索引库5.2 增删改索引库 六、文档操作6.…