Feature Rich Image Cropping Plugin with Live Preview - Cropper.js
| File Size: | 907 KB |
|---|---|
| Views Total: | 66896 |
| Last Update: | |
| Publish Date: | |
| Official Website: | Go to website |
| License: | MIT |
Cropper.js is an easy to use JavaScript/jQuery plugin for image cropping with support of live previews and custom aspect ratio.
The plugin displays a resizable grid layer on a given image allowing to visually resize and crop the image.
More features:
- Fully responsive and mobile-friendly.
- Get/set data.
- Allows to move/zoom/rotate/scale images.
Currently the jQuery Image Cropper works as a jQuery wrapper for the Cropper.js library.
See also:
- Facebook Style Image Cropping Plugin For jQuery - Drag'n'crop
- jQuery Client Side Image Cropping Plugin with Canvas and CSS3 - Simple Cropper
- jQuery Plugin For Cropping Images - Fakecrop
- jQuery Plugin for Image Cropping Functionality - imgAreaSelect
Installation:
# NPM $ npm install cropperjs --save
Basic usage:
1. Include the Cropper.js plugin's files in the web page
<link rel="stylesheet" href="/path/to/dist/cropper.min.css" /> <script src="/path/to/dist/cropper.min.js"></script>
2. Or import the Cropper.js as an ES module.
import 'cropperjs/dist/cropper.css'; import Cropper from 'cropperjs';
3. To use it as a jQuery plugin, download the jQuery Wrapper and then include the following JavaScript files on the page.
<script src="/path/to/cdn/jquery.min.js"></script> <script src="/path/to/dist/cropper.min.js"></script> <script src="/path/to/dist/jquery-cropper.min.js"></script>
4. Insert an image or canvas element into a container element.
<div> <img id="image" src="crop.jpg"> </div>
5. Make the image full width relative to its parent container.
img {
max-width: 100%;
}
6. Attach the Cropper.js to the image and done.
// As a Vanilla JS plugin
const cropper = new Cropper(document.getElementById('image'), {
// options here
});
// As a jQuery plugin
$('#image').Cropper({
// options here
});
7. Available Options with default values.
// Define the view mode of the cropper viewMode: 0, // 0, 1, 2, 3 // Define the dragging mode of the cropper dragMode: DRAG_MODE_CROP, // 'crop', 'move' or 'none' // Define the initial aspect ratio of the crop box initialAspectRatio: NaN, // Define the aspect ratio of the crop box aspectRatio: NaN, // An object with the previous cropping result data data: null, // A selector for adding extra containers to preview preview: '', // Re-render the cropper when resize the window responsive: true, // Restore the cropped area after resize the window restore: true, // Check if the current image is a cross-origin image checkCrossOrigin: true, // Check the current image's Exif Orientation information checkOrientation: true, // Show the black modal modal: true, // Show the dashed lines for guiding guides: true, // Show the center indicator for guiding center: true, // Show the white modal to highlight the crop box highlight: true, // Show the grid background background: true, // Enable to crop the image automatically when initialize autoCrop: true, // Define the percentage of automatic cropping area when initializes autoCropArea: 0.8, // Enable to move the image movable: true, // Enable to rotate the image rotatable: true, // Enable to scale the image scalable: true, // Enable to zoom the image zoomable: true, // Enable to zoom the image by dragging touch zoomOnTouch: true, // Enable to zoom the image by wheeling mouse zoomOnWheel: true, // Define zoom ratio when zoom the image by wheeling mouse wheelZoomRatio: 0.1, // Enable to move the crop box cropBoxMovable: true, // Enable to resize the crop box cropBoxResizable: true, // Toggle drag mode between "crop" and "move" when click twice on the cropper toggleDragModeOnDblclick: true, // Size limitation minCanvasWidth: 0, minCanvasHeight: 0, minCropBoxWidth: 0, minCropBoxHeight: 0, minContainerWidth: 200, minContainerHeight: 100, // Shortcuts of events ready: null, cropstart: null, cropmove: null, cropend: null, crop: null, zoom: null
8. Events listeners.
// Vanilla JavaScript
image.addEventListener(Event, function () {});
// jQuery
image.on(Event, function () {});
image.addEventListener('ready', function () {
// do something
});
image.addEventListener('cropstart', function (event) {
/* event.detail.originalEvent: mousedown, touchstart and pointerdown
event.detail.action:
'crop': create a new crop box
'move': move the canvas (image wrapper)
'zoom': zoom in / out the canvas (image wrapper) by touch.
'e': resize the east side of the crop box
'w': resize the west side of the crop box
's': resize the south side of the crop box
'n': resize the north side of the crop box
'se': resize the southeast side of the crop box
'sw': resize the southwest side of the crop box
'ne': resize the northeast side of the crop box
'nw': resize the northwest side of the crop box
'all': move the crop box (all directions)
*/
});
image.addEventListener('cropmove', function (event) {
// event.detail.originalEvent: mousemove, touchmove and pointermove
});
image.addEventListener('cropend', function (event) {
// event.detail.originalEvent: mouseup, touchend, touchcancel, pointerup and pointercancel
});
image.addEventListener('crop', function (event) {
/* event.detail.x
event.detail.y
event.detail.width
event.detail.height
event.detail.rotate
event.detail.scaleX
event.detail.scaleY
*/
});
image.addEventListener('zoom', function (event) {
/* event.detail.originalEvent: wheel, touchmove
event.detail.oldRatio
event.detail.ratio
*/
});
9. API Methods.
// Show the crop box.
new Cropper(image, {
// options here
});
// Zoom the image.
cropper.zoom(0.1);
// Zoom the canvas (image wrapper) to an absolute ratio.
cropper.zoomTo(1,{x: Number, y: Number});
// Rotate the image.
cropper.rotate(-90);
// Rotate the image to an absolute degree.
cropper.rotateTo(90);
// Scale the image.
// scale(scaleX[, scaleY])
cropper.scale(1, -1);
cropper.scaleX(1);
cropper.scaleY(1);
// Enable (unfreeze) the cropper.
cropper.enable();
// Disable (freeze) the cropper.
cropper.disable();
// Reset the cropping zone.
// Add a true param to reset the cropping zone to the default state.
cropper.reset();
// Clear the cropping zone.
cropper.clear();
// Move the canvas (image wrapper) with relative offsets.
// move(offsetX[, offsetY])
cropper.move(0, -1);
// Move the canvas (image wrapper) to an absolute point.
// moveTo(x[, y])
croppermoveTo(value1, value2);
// Replace the image.
// replace(url[, hasSameSize])
cropper.replace(example.jpg, true);
// Get the cropped zone data.
// getData([rounded])
// rounded: OPTIONAL Set true to get rounded values.
// returns:
// x: the offset left of the cropped area
// y: the offset top of the cropped area
// width: the width of the cropped area
// height: the height of the cropped area
// rotate: the rotated degrees of the image
// scaleX: the scaling factor to apply on the abscissa of the image
// scaleY: the scaling factor to apply on the ordinate of the image
cropper.getData([rounded]);
// Reset the cropped zone with new data.
cropper.setData({width: 480, height: 270});
// Get the container size data.
// Returns:
// width: the current width of the container
// height: the current height of the container
cropper.getContainerData();
// Get an object containing image data, contains:
// Returns:
// left: the offset left of the image
// top: the offset top of the image
// width: the width of the image
// height: the height of the image
// naturalWidth: the natural width of the image
// naturalHeight: the natural height of the image
// aspectRatio: the aspect ratio of the image
// rotate: the rotated degrees of the image if rotated
// scaleX: the scaling factor to apply on the abscissa of the image if scaled
// scaleY: the scaling factor to apply on the ordinate of the image if scaled
cropper.getImageData();
// Output the canvas (image wrapper) position and size data.
// Returns:
// left: the offset left of the canvas
// top: the offset top of the canvas
// width: the width of the canvas
// height: the height of the canvas
// naturalWidth: the natural width of the canvas (read only)
// naturalHeight: the natural height of the canvas (read only)
cropper.getCanvasData();
// Change the canvas (image wrapper) position and size with new data.
// Props:
// left: the new offset left of the canvas
// top: the new offset top of the canvas
// width: the new width of the canvas
// height: the new height of the canvas
cropper.setCanvasData(data);
// Output the crop box position and size data.
// Returns:
// left: the offset left of the crop box
// top: the offset top of the crop box
// width: the width of the crop box
// height: the height of the crop box
cropper.getCropBoxData();
// Change the crop box position and size with new data.
cropper.setCropBoxData(data);
// Enable to reset the aspect ratio after initialized.
// "auto" or a positive number ("auto" for free ratio).
cropper.setAspectRatio(1.618);
// Get a canvas drawn the cropped image.
// If it is not cropped, then returns a canvas drawn the whole image.
cropper.getCroppedCanvas({
width: 160,
height: 90,
minWidth: 256,
minHeight: 256,
maxWidth: 4096,
maxHeight: 4096,
fillColor: '#fff',
imageSmoothingEnabled: false,
imageSmoothingQuality: 'high',
});
// Change the drag mode.
// "crop", "move" and "none".
cropper.setDragMode("crop");
// Destroy the Cropper and remove the instance form the target image.
cropper.destroy();
Changelog:
v1.5.10 (2021-02-12)
- Explicitly set the XMLHttpRequest request to be asynchronous
- Improve TypeScript declarations
v1.5.9 (2020-09-11)
- Fix the issue of fail to zoom out on touch device
- Add TypeScript declarations for the events.
v1.5.8 (2020-09-05)
- Fix the issue when the value of the minContainerWidth/Height options is 0
- Reset the initial canvas size when the minCanvasWidth/Height options is set
- Store the initial image data in the right place for avoiding side-effect
v1.5.7 (2020-05-23)
- Improve container resizing
- Improve touch device detection
2019-12-15
- Updated to Cropper.js 1.5
v1.0.0 (2019-10-22)
- works as a jQuery wrapper for the Cropper.js library.
- Doc updated
v4.0.0 (2018-05-20)
- Works as a jQuery wrapper for Cropper.js.
v3.1.5 (2018-02-25)
- Fixed a bug of getCroppedCanvas method when provide maxWidth or maxHeight options
v3.1.4 (2018-01-14)
- Fixed a bug of rotation
v3.1.3 (2017-10-21)
- Fixed a bug of render when disable one of rotatable and scalable options.
v3.1.2 (2017-10-18)
- Normalize related decimal numbers when crop an image with canvas.
- Ignore unnecessary files when publish to NPM.
v3.1.1 (2017-10-12)
- Supports to load in node environment.
v3.1.0 (2017-10-08)
- Added 4 new options to getCroppedCanvas method: minWidth, minHeight, maxWidth and maxHeight.
- Enhanced image scaling: the scaleX and scaleY values should only be 1 or -1 before, but now they can be any numbers.
- Improved crop box resizing behaviour in the northeast, northwest, southeast and southwest directions.
v3.0.0 (2017-09-04)
- Improve crop box resizing behaviour.
v3.0.0rc3 (2017-08-19)
- Added two new options (imageSmoothingEnabled and imageSmoothingQuality) to getCroppedCanvas method.
v3.0.0rc2 (2017-05-30)
- Improved performance for large images.
- Fixed the issue of ArrayBuffer reference error in IE9.
- Fixed an issue of canvas box initialization.
v3.0.0rc1 (2017-04-30)
- Use window.jQuery instead of window.$ for browser side usage.
- Change the main field value from dist/cropper.js (UMD) to dist/cropper.common.js (CommonJS).
- Added module and browser fields to package.json.
v3.0.0 Beta (2017-03-25)
- Clear cached pointers correctly to avoid touch zoom problem.
- Improve the responsive option (only available when the container width/height great than the minContainerWidth/Height)
- Improve the toggleDragModeOnDblclick option (only available when the dragMode option is set to crop or move)
v3.0.0 Beta (2017-02-25)
- Fixed the bug of rotate square image lead image shrink.
- Improved RegExps for DataURL processing.
v3.0.0alpha1 (2017-01-21)
- Use CSS3 2D Transforms instead of left and top for better performance.
- Set withCredentials attribute when read the image data by XMLHttpRequest.
v3.0.0alpha (2017-01-15)
- Removed build event.
- Renamed built event to ready.
- Removed event namespace.
- Ported code to ECMAScript 6.
- Dropped IE8 support.
- Improved event handler for Pointer Events (#824).
- Improved setCropBoxData method.
- Fixed a bug of auto crop when replace the image.
v2.3.4 (2016-09-03)
- Fixed a bug of cropping in view mode 1 and 2.
- Fixed a bug of calling ready event twice when call replace method.
- Fixed dependencies problem in the package.json file.
v2.3.3 (2016-08-10)
- Allow scroll when the dragMode is "none" on touch screens
- Fixed the issue of orientation transform
v2.3.2 (2016-06-08)
- Fixed wrong property reference
- Fixed the wrong place of the crop event triggering
- Fixed the calling order of scale and rotate
v2.3.1 (2016-05-29)
- Improved the rotate and scale transform behaviour
- Improved the getCroppedCanvas method to return the whole canvas if it is not cropped
- Check cross origin setting when load image by XMLHTTPRequest
v2.3.0 (2016-02-22)
- Added a new parameter to the replace method for applying filters.
- Improved the image initializing for Safari .
- Fixed incorrect size limitation of the crop box.
- Fixed incorrect cropped canvas when scaleX or scaleY great than 1.
v2.2.4 (2016-01-01)
- Fixed a dimension bug in the "getCroppedCanvas" method.
- Added an example for cropping round image.
v2.2.3 (2015-12-28)
- Supports to zoom from event triggering point.
v2.2.2 (2015-12-24)
- Limit wheel speed to prevent zoom too fast
- Improve the setCropBoxData method
v2.2.1 (2015-12-12)
- Handle Data URL (Fixed #540: avoid to use XMLHttpRequest to open a Data URL)
- Handle ajax error when load ArrayBuffer
- Not to transform the image to base64 when Orientation equals to 1
v2.2.0 (2015-12-05)
- Added a new option: checkOrientation
- Added a timestamp to the url of preview image
v2.1.0 (2015-12-02)
- Added new restore option
v2.0.2 (2015-11-30)
- Fixed #476: Floor the numerical parameters for CanvasRenderingContext2D.drawImage
v2.0.1 (2015-11-18)
- Supports four modes
- Supports three drag modes
- Improved the experience of cropping
- Makes the crop box's borders and handlers visible when overflow
- Fixed an issue of canvas limitation
- Fixed an issue of cropping
- Improved new crop box creating
- Added viewMode option
- Added dragMode option
- Renamed touchDragZoom to zoomOnTouch
- Renamed mouseWheelZoom to zoomOnWheel
- Renamed doubleClickToggle to toggleDragModeOnDblclick
- Renamed checkImageOrigin to checkCrossOrigin
- Removed strict (supported by viewMode: 1)
- Removed dragCrop (supported by dragMode: 'crop')
- Added more methods and events
v1.0.0 (2015-10-10)
- Improved canvas limitation
- Improved preview
- Improved test
- Fixed an error in the clear method (missed parameters)
- Fixed the issue of crop box limitaion
v1.0.0rc1 (2015-09-05)
- Moved from Less to Sass
- Fixed the issue of destroy method)
- Fixed the issue on IE8
v0.11.1 (2015-08-22)
- Optimize "built" and "crop" events
- Improve the starting speed
- Improve the building process
- Fix event issue on IE8
v0.11.0 (2015-08-10)
- Improve setCropBoxData method
- Fix event issue on IE10
- Optimize code (use var for per variable)
v0.10.1 (2015-07-05)
- Add Pointer Events support
- Add RTL support
- Add one new option: "center"
- Allow cropper to grow vertically
v0.10.0 (2015-06-09)
- Add three new options: "change", "cropBoxMovable", "doubleClickToggle"
- Change "movable" option (only for image)
- Rename "resizable" to "cropBoxResizable"
- Add one new event: "change.cropper"
- Locking aspect ratio in "free mode" by holding shift key
- Sync drag mode to crop box when it is not movable
v0.9.3 (2015-05-10)
- Add new option: "data"
- Add new method: "setData", "crop"
- Fix incorrect minWidth/Height size of canvas
- Fix the strict mode bug
- Fix the crop box resizing bug
v0.9.2 (2015-04-18)
- Improve strict mode to show full image
- Add two new options: "minCanvasWidth" and "minCanvasHeight"
- Reverse mouse wheeling zoom
- Fix incorrect cursor in disabled state
v0.9.1 (2015-03-21)
- Fix the touch zoom issue (#206)
- Fix the reset issue
v0.9.0 (2015-03-15)
- Wraps image with a virtual canvas (for zooming and rotating).
- Limits image position and size in strict mode.
- Supports multiple global croppers by default.
- Outputs cropped canvas for display or get Data URL or get Blob
- Identifies drag events with "event.dragType" property
- Added zoom events for controling the canvas (image) size.
- Improved responsiveness for window resizing.
2015-02-21
- Refactored source code.
- Compiles CSS with Less CSS preprocessors.
- Supports fixed container.
- Supports rotation with CSS3 Transform3d.
- Add more options & methods.
2015-02-09
- v0.7.8
2015-01-03
- fixed rounding issue when setting data
2014-12-20
- fixed: rotate only works half the time with uploaded images
2014-12-13
- fixed aspectratio calculation
2014-12-06
- Add "checkImageOrigin" option.
2014-11-24
- fixed bugs
2014-11-20
- fixed bugs
2014-11-15
- v0.7.3
2014-11-11
- v0.7.2
2014-11-08
- v0.7.1
2014-10-21
- v0.7.0
2014-10-12
- v0.6.2
2014-10-04
- Fix an event error
2014-09-20
- v0.6.0
2014-09-05
- v0.5.4
2014-08-30
- v0.5.4
2014-08-23
- v0.5.3
2014-08-17
- v0.5.2
2014-08-13
- v0.5.1
2014-08-10
- v0.5.0
2014-08-05
- v0.4.4
2014-08-03
- v0.4.3
2014-08-01
- Fixed: When `minHeight` is set, Cropper doesn't respect the aspect ratio
2014-07-30
- Improve image clone
2014-07-26
- Rebuild to improve many details
2014-07-12
- Fixed a bug.
2014-07-12
- Fixed a bug: adding $clone into DOM in function render causes a flash
2014-07-08
- Improve issue: Crop zone exceeds natural image size
2014-07-06
- Fix issue: Crop zone exceeds natural image size
2014-07-02
- Fix issue
2014-06-11
- Improve.
2014-06-02
- Add callback for "enable" method.
2014-05-21
- Mobile first CSS
2014-05-18
- Add touch support and custom events
2014-05-15
- Fix a bug of"data" option
2014-05-01
- Fix a bug of"data" option
2014-04-27
- update.
2014-04-24
- fix a bug
2014-04-23
- Add free ratio and two methods
This awesome jQuery plugin is developed by fengyuanchen. For more Advanced Usages, please check the demo page or visit the official website.











