All Projects → mosch → React Avatar Editor

mosch / React Avatar Editor

Licence: mit
Small avatar & profile picture component. Resize and crop uploaded images using a intuitive user interface.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to React Avatar Editor

Smartcircle
✂️Automatically determine where to crop a circular image out of a rectangular.
Stars: ✭ 29 (-98.43%)
Mutual labels:  image, crop
Network Avatar Picker
A npm module that returns user's social network avatar. Supported providers: facebook, instagram, twitter, tumblr, vimeo, github, youtube and gmail
Stars: ✭ 74 (-95.99%)
Mutual labels:  image, avatar
Kirby Autofocus
Content aware image cropping for Kirby. Kirby 2 and 3.
Stars: ✭ 35 (-98.1%)
Mutual labels:  image, crop
Flyimg
Dockerized PHP7 application runs as a Microservice to resize and crop images on the fly. Get optimised images with MozJPEG, WebP or PNG using ImageMagick. Includes face detection, cropping, face blurring, image rotation and many other options. Abstract storage based on FlySystem in order to store images on any provider (local, AWS S3...).
Stars: ✭ 762 (-58.72%)
Mutual labels:  image, crop
Flutter crop
Crop any widget/image in Android, iOS, Web and Desktop with fancy and customizable UI, in pure Dart code.
Stars: ✭ 107 (-94.2%)
Mutual labels:  image, crop
Cdpimagecrop
CDPImageCrop can zoom,move and crop a image and automatically save into the album,details see demo.
Stars: ✭ 6 (-99.67%)
Mutual labels:  image, crop
Nova Advanced Image Field
🌄📐 A Laravel Nova advanced image field with cropping and resizing using Cropper.js and Intervention Image
Stars: ✭ 67 (-96.37%)
Mutual labels:  image, crop
Tocropviewcontroller
A view controller for iOS that allows users to crop portions of UIImage objects
Stars: ✭ 4,210 (+128.06%)
Mutual labels:  image, crop
Bimg
Go package for fast high-level image processing powered by libvips C library
Stars: ✭ 1,394 (-24.49%)
Mutual labels:  image, crop
Lipo
👄 Free image manipulation API service built on top of Sharp (an alternative to Jimp, Graphics Magic, Image Magick, and PhantomJS)
Stars: ✭ 101 (-94.53%)
Mutual labels:  image, crop
Flutter image cropper
A Flutter plugin for Android and iOS supports cropping images
Stars: ✭ 723 (-60.83%)
Mutual labels:  image, crop
Ucrop
Image Cropping Library for Android
Stars: ✭ 11,003 (+496.05%)
Mutual labels:  image, crop
React Native Image Crop Picker
iOS/Android image picker with support for camera, video, configurable compression, multiple images and cropping
Stars: ✭ 5,261 (+184.99%)
Mutual labels:  image, crop
Instagrid Js
A Javascript library to do exactly what Instagram Layout application does
Stars: ✭ 13 (-99.3%)
Mutual labels:  image, crop
Fmphotopicker
A modern, simple and zero-dependency photo picker with an elegant and customizable image editor
Stars: ✭ 428 (-76.81%)
Mutual labels:  image, crop
Extended image
A powerful official extension library of image, which support placeholder(loading)/ failed state, cache network, zoom pan image, photo view, slide out page, editor(crop,rotate,flip), paint custom etc.
Stars: ✭ 1,021 (-44.69%)
Mutual labels:  image, crop
Imaging
Imaging is a simple image processing package for Go
Stars: ✭ 4,023 (+117.93%)
Mutual labels:  image, crop
Sharp
High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, AVIF and TIFF images. Uses the libvips library.
Stars: ✭ 21,131 (+1044.69%)
Mutual labels:  image, crop
Docker Nginx Image Proxy
on the fly image cropping with gravity, resize and compression microservice
Stars: ✭ 79 (-95.72%)
Mutual labels:  image, crop
Lilliput
Resize images and animated GIFs in Go
Stars: ✭ 1,690 (-8.45%)
Mutual labels:  image, crop

react-avatar-editor

npm version Downloads Build Status

Facebook like, avatar / profile picture component. Resize, crop and rotate your uploaded image using a clear user interface.

Install

Just use yarn or npm to add it to your project:

yarn add react-avatar-editor

respective

npm install --save react-avatar-editor

Demo

Demo

Usage

import React from 'react'
import AvatarEditor from 'react-avatar-editor'

class MyEditor extends React.Component {
  render() {
    return (
      <AvatarEditor
        image="http://example.com/initialimage.jpg"
        width={250}
        height={250}
        border={50}
        color={[255, 255, 255, 0.6]} // RGBA
        scale={1.2}
        rotate={0}
      />
    )
  }
}

export default MyEditor

Props

Prop Type Description
image String|File The URL of the image to use, or a File (e.g. from a file input).
width Number The total width of the editor.
height Number The total height of the editor.
border Number|Number[] The cropping border. Image will be visible through the border, but cut off in the resulting image. Treated as horizontal and vertical borders when passed an array.
borderRadius Number The cropping area border radius.
color Number[] The color of the cropping border, in the form: [red (0-255), green (0-255), blue (0-255), alpha (0.0-1.0)].
backgroundColor String The background color of the image if it's transparent.
style Object Styles for the canvas element.
scale Number The scale of the image. You can use this to add your own resizing slider.
position Object The x and y co-ordinates (in the range 0 to 1) of the center of the cropping area of the image. Note that if you set this prop, you will need to keep it up to date via onPositionChange in order for panning to continue working.
rotate Number The rotation degree of the image. You can use this to rotate image (e.g 90, 270 degrees).
crossOrigin String The value to use for the crossOrigin property of the image, if loaded from a non-data URL. Valid values are "anonymous" and "use-credentials". See this page for more information.
className String|String[] className property passed to the canvas element
onLoadFailure(event) function Invoked when an image (whether passed by props or dropped) load fails.
onLoadSuccess(imgInfo) function Invoked when an image (whether passed by props or dropped) load succeeds.
onImageReady(event) function Invoked when the image is painted on the canvas the first time.
onMouseUp() function Invoked when the user releases their mouse button after interacting with the editor.
onMouseMove(event) function Invoked when the user hold and moving the image.
onImageChange() function Invoked when the user changed the image. Not invoked on the first render, and invoked multiple times during drag, etc.
onPositionChange() function Invoked when the user pans the editor to change the selected area of the image. Passed a position object in the form { x: 0.5, y: 0.5 } where x and y are the relative x and y coordinates of the center of the selected area.
disableBoundaryChecks Boolean Set to true to allow the image to be moved outside the cropping boundary.
disableHiDPIScaling Boolean Set to true to disable devicePixelRatio based canvas scaling. Can improve perfermance of very large canvases on mobile devices.

Accessing the resulting image

The resulting image will have the same resolution as the original image, regardless of the editor's size. If you want the image sized in the dimensions of the canvas you can use getImageScaledToCanvas.

import React from 'react'
import AvatarEditor from 'react-avatar-editor'

class MyEditor extends React.Component {
  onClickSave = () => {
    if (this.editor) {
      // This returns a HTMLCanvasElement, it can be made into a data URL or a blob,
      // drawn on another canvas, or added to the DOM.
      const canvas = this.editor.getImage()

      // If you want the image resized to the canvas size (also a HTMLCanvasElement)
      const canvasScaled = this.editor.getImageScaledToCanvas()
    }
  }

  setEditorRef = (editor) => (this.editor = editor)

  render() {
    return (
      <AvatarEditor
        ref={this.setEditorRef}
        image="http://example.com/initialimage.jpg"
        width={250}
        height={250}
        border={50}
        scale={1.2}
      />
    )
  }
}

export default MyEditor

Adding drag and drop

We recommend using react-dropzone. It allows you to add drag and drop support to anything really easy. Here is an example how to use it with react-avatar-editor:

import React from 'react'
import AvatarEditor from 'react-avatar-editor'
import Dropzone from 'react-dropzone'

class MyEditor extends React.Component {
  state = {
    image: 'http://example.com/initialimage.jpg',
  }

  handleDrop = (dropped) => {
    this.setState({ image: dropped[0] })
  }

  render() {
    return (
      <Dropzone
        onDrop={this.handleDrop}
        noClick
        noKeyboard
        style={{ width: '250px', height: '250px' }}
      >
        {({ getRootProps, getInputProps }) => (
          <div {...getRootProps()}>
            <AvatarEditor width={250} height={250} image={this.state.image} />
            <input {...getInputProps()} />
          </div>
        )}
      </Dropzone>
    )
  }
}

Accessing the cropping rectangle

Sometimes you will need to get the cropping rectangle (the coordinates of the area of the image to keep), for example in case you intend to perform the actual cropping server-side.

getCroppingRect() returns an object with four properties: x, y, width and height; all relative to the image size (that is, comprised between 0 and 1). It is a method of AvatarEditor elements, like getImage().

Note that: getImage() returns a canvas element and if you want to use it in src attribute of img, convert it into a blob url.

const canvas = this.editor.getImage().toDataURL();
let imageURL;
fetch(canvas)
  .then(res => res.blob())
  .then(blob => (imageURL = window.URL.createObjectURL(blob)));

// Usage
<img src={imageURL} ... />

Contributing

For development you can use following build tools:

  • npm run build: Builds the minified dist file: dist/index.js
  • npm run watch: Watches for file changes and builds unminified into: dist/index.js
  • npm run demo:build: Builds the demo based on the dist file dist/index.js
  • npm run demo:watch: Run webpack-dev-server. Check demo website localhost:8080

Kudos

Kudos and thanks to danlee for the imporant work & many contributions to this project! Also thanks to oyeanuj, mtlewis and hu9o and all other awesome people contributing to this.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].