如何使用CropperJS进行图片裁剪?
- 行业动态
- 2025-01-17
- 2624
cropperjs
是一款基于 JavaScript 的图像裁剪库,可用于在网页上实现图片裁剪功能。
Cropper.js是一个强大且灵活的JavaScript图片裁剪工具,广泛应用于各种网页和移动应用中,它支持多种配置选项和功能,能够满足开发者在不同场景下的需求,以下是对Cropper.js使用的一些详细介绍:
Cropper.js 的基本使用方法
1、引入 Cropper.js
可以通过npm安装Cropper.js:npm install cropperjs
在项目中引入CSS和JS文件:
import 'cropperjs/dist/cropper.css'; import Cropper from 'cropperjs';
2、HTML结构
需要用块元素(如div)包裹图像或画布元素:
<div> <img id="image" src="picture.jpg"> </div>
确保图像大小完全适合容器:
img { display: block; /* 这个规则很重要,请不要忽略 */ max-width: 100%; }
3、实例化 Cropper
获取DOM对象并调用Cropper构造函数:
const image = document.getElementById('image'); const cropper = new Cropper(image, { aspectRatio: 1, // 裁剪框尺寸 viewMode: 1, // 限制裁剪框不超过画布的大小 dragMode: 'move', // 定义裁剪器的拖动模式。 移动画布 cropBoxResizable: false, // 通过拖动来调整裁剪框的大小 cropBoxMovable: false, // 通过拖动移动裁剪框。 background: false // 显示容器的网格背景 });
4、获取裁切后的图片
使用getCroppedCanvas
方法获取裁切后的图片信息:
getCroppedCanvas() { return new Promise(resolve => { this.cropper.getCroppedCanvas().toBlob(blob => { resolve(blob); }); }); }
5、示例代码
完整示例如下:
<template> <div class="updata-photo"> <img :src="image" alt="" ref="img"> <van-nav-bar left-text="取消" right-text="确认" @click-left="$emit('close')" @click-right="onClickRight"></van-nav-bar> </div> </template> <script> import { setPhotofile } from '@/api/user.js'; import 'cropperjs/dist/cropper.css'; import Cropper from 'cropperjs'; export default { name: 'UpdataPhoto', props: { value: { type: String, require: true }, file: { type: File, require: true } }, data() { return { image: window.URL.createObjectURL(this.file), cropper: null }; }, methods: { getCroppedCanvas() { return new Promise(resolve => { this.cropper.getCroppedCanvas().toBlob(blob => { resolve(blob); }); }); }, async onClickRight() { this.$toast.loading({ message: '修改中...', forbidClick: true }); const file = await this.getCroppedCanvas(); const fd = new FormData(); fd.append('photo', file); const res = await setPhotofile(fd).catch(err => err); if (res.status !== 201) { this.$toast.fail('修改失败'); return; } this.$toast.success('修改成功'); this.$emit('input', res.data.data.photo); this.$emit('close'); } }, mounted() { const image = this.$refs.img; this.cropper = new Cropper(image, { aspectRatio: 1, // 裁剪框尺寸 viewMode: 1, // 限制裁剪框不超过画布的大小 dragMode: 'move', // 定义裁剪器的拖动模式。 移动画布 cropBoxResizable: false, // 通过拖动来调整裁剪框的大小 cropBoxMovable: false, // 通过拖动移动裁剪框。 background: false // 显示容器的网格背景 }); } }; </script>
Cropper.js 的配置选项
配置项 | 描述 | 默认值 |
aspectRatio |
裁剪框的宽高比 | NaN |
viewMode |
视图模式,决定裁剪框是否超出画布范围 | 0 |
dragMode |
拖动模式,可以是’crop’、’move’或’none’ | ‘crop’ |
background |
是否显示网格背景 | true |
autoCropArea |
自动裁剪区域占图片的比例 | 0.8 |
cropBoxMovable |
是否可以移动裁剪框 | true |
cropBoxResizable |
是否可以调整裁剪框的大小 | true |
rotatable |
是否允许旋转图片 | true |
scalable |
是否允许缩放图片 | true |
zoomable |
是否允许缩放图片 | true |
zoomOnTouch |
是否允许触摸缩放 | true |
zoomOnWheel |
是否允许鼠标滚轮缩放 | true |
wheelZoomRatio |
鼠标滚轮缩放灵敏度 | 0.1 |
restore |
窗口尺寸变化时是否恢复被裁剪的区域 | true |
checkCrossOrigin |
是否检查跨域图片 | true |
checkOrientation |
是否检查图片方向信息 | true |
modal |
是否显示黑色蒙版 | true |
guides |
是否显示虚线指示器 | true |
center |
是否显示中心点 | true |
highlight |
是否显示白色蒙版 | true |
responsive |
是否响应式设计 | true |
preview |
预览元素,可以是Element、Array、NodeList或选择器字符串 | ” |
minContainerWidth |
容器最小宽度 | 200 |
minContainerHeight |
容器最小高度 | 100 |
minCanvasWidth |
画布最小宽度 | 0 |
minCanvasHeight |
画布最小高度 | 0 |
minCropBoxWidth |
裁剪框最小宽度 | 0 |
minCropBoxHeight |
裁剪框最小高度 | 0 |
toggleDragModeOnDblclick |
双击切换拖动模式 | true |
Cropper.js 的事件与回调函数
事件名 | 触发时机 |
cropstart |
开始裁剪时触发 |
cropmove |
裁剪框移动时触发 |
cropend |
结束裁剪时触发 |
crop |
完成裁剪时触发 |
zoom |
缩放时触发 |
zoomstart |
开始缩放时触发 |
zoomend |
结束缩放时触发 |
rotate |
旋转时触发 |
rotatestart |
开始旋转时触发 |
rotateend |
结束旋转时触发 |
move |
移动时触发 |
movestart |
开始移动时触发 |
moveend |
结束移动时触发 |
clear |
清除裁剪框时触发 |
replace |
替换图片时触发 |
destroy |
销毁裁剪实例时触发 |
常见问题解答(FAQ)
1、如何设置裁剪框的初始宽高比?
可以在初始化Cropper实例时,通过initialAspectRatio
选项来设置:
const cropper = new Cropper(image, { initialAspectRatio: 16 / 9 });
2、如何处理跨域图片问题?
确保在初始化Cropper实例时,设置checkCrossOrigin
为true,这样Cropper会处理跨域图片的问题:
const cropper = new Cropper(image, { checkCrossOrigin: true });
3、如何在用户双击时切换拖动模式?
可以通过设置toggleDragModeOnDblclick
选项来实现:
const cropper = new Cropper(image, { toggleDragModeOnDblclick: true });
当用户双击图片时,会在move
和crop
模式之间切换。
Cropper.js是一款功能强大且易于使用的JavaScript图片裁剪工具,适用于各种前端开发需求,通过灵活的配置选项和丰富的API接口,开发者可以轻松实现图片裁剪功能,提升用户体验。