React Image Annotation
Add an annotation layer to an image using the Annotorious React components.
import { Annotorious, ImageAnnotator } from '@annotorious/react';
import '@annotorious/react/annotorious-react.css';
export default function App() { return ( <Annotorious> <ImageAnnotator> <img src="example.jpg" /> </ImageAnnotator> </Annotorious> );}
Step-by-Step Guide
Section titled “Step-by-Step Guide”-
Import the
Annotorious
andImageAnnotator
components.import { Annotorious, ImageAnnotator } from '@annotorious/react'; -
Import Annotorious base CSS styles.
import '@annotorious/react/annotorious-react.css'; -
Important: wrap your application with the
<Annotatorious>
root context tag - other Annotorious components depend on it. You can use Annotorious-provided hooks anywhere below the context tag.export default function App() {return (<Annotorious><MyAnnotatableImage /></Annotorious>);}export const MyAnnotatableImage = () => {// You can use Annotorious hooks here!const annotations = useAnnotations();// ...return (<ImageAnnotator><img src="example.jpg" /></ImageAnnotator>);}
Styling
Section titled “Styling”You can apply custom styling to annotations via the style
prop. The style can
be:
- A DrawingStyle object.
- A function that receives the ImageAnnotation and the AnnotationState as an input, and returns a DrawingStyle.
const style = (annotation: ImageAnnotation, state: AnnotationState) => ({ fill: state.hovered ? '#ff0000' : '#ffffff', fillOpacity: 0.25});
<ImageAnnotator style={style}> <img src="example.jpg" /></ImageAnnotator>
Filters
Section titled “Filters”Using a filter, you can dynamically control the visibility of specific annotations,
based on their data or external criteria. The filter is a function that receives
the ImageAnnotation as an input, and returns a boolean.
true
makes the annotation visible, false
hides it.
const showImportantFilter = (annotation: Annotation) => { // Show only if the annotation has an 'important' tag return annotation.bodies.some(b => b.purpose === 'tagging' && b.value === 'important');};
<ImageAnnotator filter={showImportantFilter}> <img src="example.jpg" /></ImageAnnotator>;
Selection Behavior
Section titled “Selection Behavior”When a user selects an annotation by click or tap, the default behavior is
that the shape will become editable. You can change this behavior through
the userSelectAction
prop. The prop accepts:
- a UserSelectAction object.
- a function that receives an ImageAnnotation as input, and returns a UserSelectAction.
A UserSelectAction has one of the three following values.
- EDIT: makes the annotation editable, allowing the users to modify its shape (default).
- SELECT: clicking an annotation triggers the relevant selection event, but the annotation will not become editable.
- NONE: the annotation is inert. Clicking or tapping it has no effect.
import { UserSelectAction } from '@annotorious/react';
// Make all annotations 'read-only'.<ImageAnnotator userSelectAction={UserSelectAction.SELECT}> <img src="example.jpg" /></ImageAnnotator>
// Function: only allow editing on my own annotation.const allowEditingMyOwn = (annotation: ImageAnnotation) => { const isMine = annotation.target.creator.id == 'me'; return isMine ? UserSelectAction.EDIT : UserSelectAction.SELECT;};
<ImageAnnotator userSelectAction={allowEditingMyOwn}> <img src="example.jpg" /></ImageAnnotator>
W3C Format Adapter
Section titled “W3C Format Adapter”A FormatAdapter adds support for different annotation data formats, by introducing crosswalk functionality between Annotorious’ internal annotation data model and other standards.
You can supply a format adapter through the optional adapter
prop.
Currently, the only available adapter is for the
W3C Web Annotation Data Model.
import { Annotorious, ImageAnnotator, W3CImageFormat } from '@annotorious/react';
<Annotorious> <ImageAnnotator adapter={W3CImageFormat('example.jpg')}> <img src="example.jpg" /> </ImageAnnotator></Annotorious>
Read more about the Annotorious Data Format, the W3C Format and the differences here.