当前位置:首页>行业动态> 正文

如何使用CropperJS进行图片裁剪?

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>

确保图像大小完全适合容器:

如何使用CropperJS进行图片裁剪?  第1张

     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 });

当用户双击图片时,会在movecrop模式之间切换。

Cropper.js是一款功能强大且易于使用的JavaScript图片裁剪工具,适用于各种前端开发需求,通过灵活的配置选项和丰富的API接口,开发者可以轻松实现图片裁剪功能,提升用户体验。