New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

react-image-annotator

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-image-annotator

react-image-annotator React component

  • 1.0.2
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

React Image Annotator

A fully featured & easily customizable image annotation library built on React

react-image-annotator example

Docs and Demo.

Inspired by react-image-annotation.

Installation

npm install --save react-image-annotator
# or
yarn add react-image-annotator

Usage



const Simple = () => {

  const [annotations, setAnnotations] = useState([]);
  const [annotation, setAnnotation] = useState({});

  const onChange = (newAnnotation) => {
    setAnnotation(newAnnotation);
  }

  const onSubmit = (newAnnotation) => {
    const { geometry, data } = newAnnotation;

    const newAnnotations = annotations.concat({
      geometry,
      data: {
        ...data,
        id: Math.random()
      }
    });

    setAnnotation({});
    setAnnotations(newAnnotations);
  }

  return (
    <Annotation
      src={img}
      alt='Two persons with umbrella'
      annotations={annotations}
      type={'RECTANGLE'}
      value={annotation}
      onChange={onChange}
      onSubmit={onSubmit}
    />
  )
}

export default Simple;

Props

PropDescriptionDefault
srcImage src attribute
altImage alt attribute
annotationsArray of annotations
valueAnnotation object currently being created. See annotation object
onChangeonChange handler for annotation object
onSubmitonSubmit handler for annotation object
typeSelector type. See custom shapesRECTANGLE
allowTouchSet to true to allow the target to handle touch events. This disables one-finger scrollingfalse
selectorsAn array of selectors. See adding custom selector logic[RectangleSelector, PointSelector, OvalSelector]
activeAnnotationsArray of annotations that will be passed as 'active' (active highlight and shows content)
activeAnnotationComparatorMethod to compare annotation and activeAnnotation item (from props.activeAnnotations). Return true if it's the annotations are equal(a, b) => a === b
disableAnnotationSet to true to disable creating of annotations (note that no callback methods will be called if this is true)false
disableSelectorSet to true to not render Selectorfalse
disableEditorSet to true to not render Editorfalse
disableOverlaySet to true to not render Overlayfalse
renderSelectorFunction that renders Selector ComponentSee custom components
renderEditorFunction that renders Editor ComponentSee custom components
renderHighlightFunction that renders Highlight ComponentSee custom components
renderContentFunction that renders ContentSee custom components
renderOverlayFunction that renders OverlaySee custom components
onMouseUponMouseUp handler on annotation target
onMouseDownonMouseDown handler on annotation target
onMouseMoveonMouseMove handler on annotation target
onClickonClick handler on annotation target
Annotation object

An Annotation object is an object that conforms to the object shape

({
  selection: T.object, // temporary object for selector logic
  geometry: T.shape({ // geometry data for annotation
    type: T.string.isRequired // type is used to resolve Highlighter/Selector renderer
  }),
  // auxiliary data object for application.
  // Content data can be stored here (text, image, primary key, etc.)
  data: T.object
})

Using custom components

Annotation supports renderProps for almost every internal component.

This allows you to customize everything about the the look of the annotation interface, and you can even use canvas elements for performance or more complex interaction models.

  • renderSelector - used for selecting annotation area (during annotation creation)
  • renderEditor - appears after annotation area has been selected (during annotation creation)
  • renderHighlight - used to render current annotations in the annotation interface. It is passed an object that contains the property active, which is true if the mouse is hovering over the higlight
  • renderComponent - auxiliary component that appears when mouse is hovering over the highlight. It is passed an object that contains the annotation being hovered over. { annotation }
  • renderOverlay - Component overlay for Annotation (i.e. 'Click and Drag to Annotate')

You can view the default renderProps here

Note: You cannot use :hover selectors in css for components returned by renderSelector and renderHighlight. This is due to the fact that Annotation places DOM layers on top of these components, preventing triggering of :hover

Using custom shapes

Annotation supports three shapes by default, RECTANGLE, POINT and OVAL.

You can switch the shape selector by passing the appropriate type as a property. Default shape TYPEs are accessible on their appropriate selectors:

import {
  PointSelector,
  RectangleSelector,
  OvalSelector
} from 'react-image-annotation/lib/selectors'

<Annotation
  type={PointSelector.TYPE}
/>

Adding custom selector logic

This is an Advanced Topic

The Annotation API allows support for custom shapes that use custom logic such as polygon or freehand selection. This is done by defining your own selection logic and passing it as a selector in the selectors property.

Selectors are objects that must have the following properties:

  • TYPE - string that uniquely identifies this selector (i.e. RECTANGLE)
  • intersects - method that returns true if the mouse point intersects with the annotation geometry
  • area - method that calculates and returns the area of the annotation geometry
  • methods - object that can contain various listener handlers (onMouseUp, onMouseDown, onMouseMove, onClick). These listener handlers are called when triggered in the annotation area. These handlers must be reducer-like methods - returning a new annotation object depending on the change of the method

You can view a defined RectangleSelector here

Connecting selector logic to Redux/MobX

First see Selectors

You can use Selector methods to connect these method logic to your stores. This is due to the fact that selector methods function as reducers, returning new state depending on the event.

Note that it is not necessary to connect the selector logic with redux/mobx. Connecting the annotation and annotations state is more than enough for most use cases.

License

MIT

Keywords

FAQs

Package last updated on 16 Feb 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc