cropperjs

cropperjs

功能全面的JavaScript图像裁剪工具

Cropper.js是一款功能丰富的JavaScript图像裁剪工具。该库提供39个配置选项、27个方法和6个事件,支持触摸操作、缩放、旋转和翻转等功能。Cropper.js具有跨浏览器兼容性,可创建多个裁剪器实例,并通过Canvas在浏览器端实现图像裁剪。此外,它还能解析Exif方向信息,为开发者提供灵活高效的图像处理方案。

Cropper.js图像裁剪JavaScript库前端开发用户交互Github开源项目

Cropper.js

Downloads Version Gzip Size

JavaScript image cropper. This is the branch for v1.x, for v2.x, check out the v2 branch.

Table of contents

Features

  • Supports 39 options
  • Supports 27 methods
  • Supports 6 events
  • Supports touch (mobile)
  • Supports zooming
  • Supports rotating
  • Supports scaling (flipping)
  • Supports multiple croppers
  • Supports cropping on a canvas
  • Supports cropping an image on the browser-side by canvas
  • Supports translating Exif Orientation information
  • Cross-browser support

Main files

dist/ ├── cropper.css ├── cropper.min.css (compressed) ├── cropper.js (UMD) ├── cropper.min.js (UMD, compressed) ├── cropper.common.js (CommonJS, default) └── cropper.esm.js (ES Module)

Getting started

Installation

npm install cropperjs

In browser:

<link href="/path/to/cropper.css" rel="stylesheet"> <script src="/path/to/cropper.js"></script>

cdnjs provides CDN support for Cropper.js's CSS and JavaScript. You can find the links here.

Usage

Syntax

new Cropper(element[, options])
  • element

    • Type: HTMLImageElement or HTMLCanvasElement
    • The target image or canvas element for cropping.
  • options (optional)

    • Type: Object
    • The options for cropping. Check out the available options.

Example

<!-- Wrap the image or canvas element with a block element (container) --> <div> <img id="image" src="picture.jpg"> </div>
/* Make sure the size of the image fits perfectly into the container */ img { display: block; /* This rule is very important, please don't ignore this */ max-width: 100%; }
// import 'cropperjs/dist/cropper.css'; import Cropper from 'cropperjs'; const image = document.getElementById('image'); const cropper = new Cropper(image, { aspectRatio: 16 / 9, crop(event) { console.log(event.detail.x); console.log(event.detail.y); console.log(event.detail.width); console.log(event.detail.height); console.log(event.detail.rotate); console.log(event.detail.scaleX); console.log(event.detail.scaleY); }, });

FAQ

How to crop a new area after zooming in or zooming out?

Just double-click your mouse to enter crop mode.

How to move the image after cropping an area?

Just double-click your mouse to enter move mode.

How to fix the aspect ratio in free ratio mode?

Just hold the Shift key when you resize the crop box.

How to crop a square area in free ratio mode?

Just hold the Shift key when you crop on the image.

Notes

  • The size of the cropper inherits from the size of the image's parent element (wrapper), so be sure to wrap the image with a visible block element.

    If you are using cropper in a modal, you should initialize the cropper after the modal is shown completely. Otherwise, you will not get the correct cropper.

  • The outputted cropped data is based on the original image size, so you can use them to crop the image directly.

  • If you try to start cropper on a cross-origin image, please make sure that your browser supports HTML5 CORS settings attributes, and your image server supports the Access-Control-Allow-Origin option (see the HTTP access control (CORS)).

Known issues

  • Known iOS resource limits: As iOS devices limit memory, the browser may crash when you are cropping a large image (iPhone camera resolution). To avoid this, you may resize the image first (preferably below 1024 pixels) before starting a cropper.

  • Known image size increase: When exporting the cropped image on the browser side with the HTMLCanvasElement.toDataURL method, the size of the exported image may be greater than the original image's. This is because the type of the exported image is not the same as the original image. So just pass the original image's type as the first parameter to toDataURL to fix this. For example, if the original type is JPEG, then use cropper.getCroppedCanvas().toDataURL('image/jpeg') to export image.

⬆ back to top

Options

You may set cropper options with new Cropper(image, options). If you want to change the global default options, You may use Cropper.setDefaults(options).

viewMode

  • Type: Number
  • Default: 0
  • Options:
    • 0: no restrictions
    • 1: restrict the crop box not to exceed the size of the canvas.
    • 2: restrict the minimum canvas size to fit within the container. If the proportions of the canvas and the container differ, the minimum canvas will be surrounded by extra space in one of the dimensions.
    • 3: restrict the minimum canvas size to fill fit the container. If the proportions of the canvas and the container are different, the container will not be able to fit the whole canvas in one of the dimensions.

Define the view mode of the cropper. If you set viewMode to 0, the crop box can extend outside the canvas, while a value of 1, 2, or 3 will restrict the crop box to the size of the canvas. viewMode of 2 or 3 will additionally restrict the canvas to the container. There is no difference between 2 and 3 when the proportions of the canvas and the container are the same.

dragMode

  • Type: String
  • Default: 'crop'
  • Options:
    • 'crop': create a new crop box
    • 'move': move the canvas
    • 'none': do nothing

Define the dragging mode of the cropper.

initialAspectRatio

  • Type: Number
  • Default: NaN

Define the initial aspect ratio of the crop box. By default, it is the same as the aspect ratio of the canvas (image wrapper).

Only available when the aspectRatio option is set to NaN.

aspectRatio

  • Type: Number
  • Default: NaN

Define the fixed aspect ratio of the crop box. By default, the crop box has a free ratio.

data

  • Type: Object
  • Default: null

The previous cropped data you stored will be passed to the setData method automatically when initialized.

Only available when the autoCrop option had set to the true.

preview

  • Type: Element, Array (elements), NodeList or String (selector)
  • Default: ''
  • An element or an array of elements or a node list object or a valid selector for Document.querySelectorAll

Add extra elements (containers) for preview.

Notes:

  • The maximum width is the initial width of the preview container.
  • The maximum height is the initial height of the preview container.
  • If you set an aspectRatio option, be sure to set the same aspect ratio to the preview container.
  • If the preview does not display correctly, set the overflow: hidden style to the preview container.

responsive

  • Type: Boolean
  • Default: true

Re-render the cropper when resizing the window.

restore

  • Type: Boolean
  • Default: true

Restore the cropped area after resizing the window.

checkCrossOrigin

  • Type: Boolean
  • Default: true

Check if the current image is a cross-origin image.

If so, a crossOrigin attribute will be added to the cloned image element, and a timestamp parameter will be added to the src attribute to reload the source image to avoid browser cache error.

Adding a crossOrigin attribute to the image element will stop adding a timestamp to the image URL and stop reloading the image. But the request (XMLHttpRequest) to read the image data for orientation checking will require a timestamp to bust the cache to avoid browser cache error. You can set the checkOrientation option to false to cancel this request.

If the value of the image's crossOrigin attribute is "use-credentials", then the withCredentials attribute will set to true when read the image data by XMLHttpRequest.

checkOrientation

  • Type: Boolean
  • Default: true

Check the current image's Exif Orientation information. Note that only a JPEG image may contain Exif Orientation information.

Exactly, read the Orientation value for rotating or flipping the image, and then override the Orientation value with 1 (the default value) to avoid some issues (1, 2) on iOS devices.

Requires to set both the rotatable and scalable options to true at the same time.

Note: Do not trust this all the time as some JPG images may have incorrect (non-standard) Orientation values

Requires Typed Arrays support (IE 10+).

modal

  • Type: Boolean
  • Default: true

Show the black modal above the image and under the crop box.

guides

  • Type: Boolean
  • Default: true

Show the dashed lines above the crop box.

center

  • Type: Boolean
  • Default: true

Show the center indicator above the crop box.

highlight

  • Type: Boolean
  • Default: true

Show the white modal above the crop box (highlight the crop box).

background

  • Type: Boolean
  • Default: true

Show the grid background of the container.

autoCrop

  • Type: Boolean
  • Default: true

Enable to crop the image automatically when initialized.

autoCropArea

  • Type: Number
  • Default: 0.8 (80% of the image)

It should be a number between 0 and 1. Define the automatic cropping area size (percentage).

movable

  • Type: Boolean
  • Default: true

Enable to move the image.

rotatable

  • Type: Boolean
  • Default: true

Enable to rotate the image.

scalable

  • Type: Boolean
  • Default: true

Enable to scale the image.

zoomable

  • Type: Boolean
  • Default: true

Enable to zoom the image.

zoomOnTouch

  • Type: Boolean
  • Default: true

Enable to zoom the image by dragging touch.

zoomOnWheel

  • Type: Boolean
  • Default: true

Enable to zoom the image by mouse wheeling.

wheelZoomRatio

  • Type: Number
  • Default: 0.1

Define zoom ratio when zooming the image by mouse wheeling.

cropBoxMovable

  • Type: Boolean
  • Default: true

Enable to move the crop box by dragging.

cropBoxResizable

  • Type: Boolean
  • Default: true

Enable to resize the crop box by dragging.

toggleDragModeOnDblclick

  • Type: Boolean
  • Default: true

Enable to toggle drag mode between "crop" and "move" when clicking twice on the cropper.

Requires dblclick event support.

minContainerWidth

  • Type: Number
  • Default: 200

The minimum width of the container.

minContainerHeight

  • Type: Number
  • Default: 100

The minimum height of the container.

minCanvasWidth

  • Type: Number
  • Default: 0

The minimum width of the canvas (image wrapper).

minCanvasHeight

  • Type: Number
  • Default: 0

The minimum height of the canvas (image wrapper).

minCropBoxWidth

  • Type: Number
  • Default: 0

The minimum width of the crop box.

Note: This size is relative to the page, not the image.

minCropBoxHeight

  • Type: Number
  • Default: 0

The minimum height of the crop box.

Note: This size is relative to the page, not the image.

ready

  • Type: Function
  • Default: null

A shortcut to the ready event.

cropstart

  • Type: Function
  • Default: null

A shortcut to the cropstart event.

cropmove

  • Type: Function
  • Default: null

A shortcut to the cropmove event.

cropend

  • Type: Function
  • Default: null

A shortcut to the cropend event.

crop

  • Type: Function
  • Default: null

A shortcut to the crop event.

zoom

  • Type: Function
  • Default: null

A shortcut to the zoom event.

⬆ back to top

Methods

As there is an asynchronous process when loading the image, you should call most of the methods after ready, except setAspectRatio, replace and destroy.

If a method doesn't need to return any value, it will return the cropper instance (this) for chain composition.

new Cropper(image, { ready() { // this.cropper[method](argument1, , argument2, ..., argumentN); this.cropper.move(1, -1); // Allows chain composition this.cropper.move(1, -1).rotate(45).scale(1, -1); }, });

crop()

Show the crop box manually.

new Cropper(image, { autoCrop: false, ready() { // Do something here // ... // And then this.cropper.crop(); }, });

reset()

Reset the image and crop box to its initial states.

clear()

Clear the crop box.

replace(url[, hasSameSize])

  • url:

    • Type: String
    • A new image url.
  • hasSameSize (optional):

    • Type: Boolean
    • Default: false
    • If the new image has the same size as the old one, then it will not rebuild the cropper and only update the URLs of all related images. This can be used for applying filters.

Replace the image's src and rebuild the cropper.

enable()

Enable (unfreeze) the cropper.

disable()

Disable (freeze) the cropper.

destroy()

Destroy the cropper and remove the instance from the image.

move(offsetX[, offsetY])

  • offsetX:

    • Type: Number
    • Moving size (px) in the horizontal direction.
  • offsetY (optional):

    • Type: Number
    • Moving size (px) in the vertical direction.
    • If not present, its default value is offsetX.

Move the canvas (image wrapper) with relative offsets.

cropper.move(1); cropper.move(1, 0); cropper.move(0, -1);

moveTo(x[, y])

  • x:

    • Type: Number
    • The left value of the canvas
  • y (optional):

    • Type: Number
    • The top value of the canvas
    • If not present, its default value is x.

Move the canvas (image wrapper) to an absolute point.

zoom(ratio)

  • ratio:
    • Type: Number
    • Zoom in: requires a positive number (ratio > 0)
    • Zoom out: requires a negative number (ratio < 0)

Zoom the canvas (image wrapper) with a relative ratio.

cropper.zoom(0.1); cropper.zoom(-0.1);

zoomTo(ratio[, pivot])

  • ratio:

    • Type: Number
    • Requires a positive number (ratio > 0)
  • pivot (optional):

    • Type: Object
    • Schema: { x: Number, y: Number }
    • The coordinate of the center point for

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料��星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多