cropper.js裁剪图片的使用 - 41酱的小草莓

时间:2024-04-16 16:32:15

cropper.js裁剪图片的使用

官网 http://fengyuanchen.github.io/cropper/
文档 https://github.com/fengyuanchen/cropper/blob/master/README.md


 

引入js

1 <link  href="/path/to/cropper.css" rel="stylesheet">
2 <script src="/path/to/cropper.js"></script>
3 <!-- 建议把单独的img标签放在一个div中 包裹画布-->
4 <div class="box">
5   <img id="image" src="picture.jpg">
6 </div>

这里注意,直接设置img的宽高是没有效果的,但是可以在父盒子上(即.box)设置

  • 官方引入方式

 1 var cropper = new Cropper(image, {
 2   aspectRatio: 16 / 9,
 3   viewMode:1,
 4   crop: function (e) {
 5     console.log(e.detail.x);
 6     console.log(e.detail.y);
 7        console.log(e.detail.width);
 8        console.log(e.detail.height);
 9        console.log(e.detail.rotate);
10        console.log(e.detail.scaleX);
11        console.log(e.detail.scaleY);
12   }
13 });
  • 本地引入方式

如果使用的是本地的cropper.js和cropper.css,可能报版本的错误,用下面的引入代码:

1 $(\'#image\').cropper({
2     aspectRatio: 16 / 9,
3     viewMode:1,
4     crop: function (e) {
5         console.log(e);
6     }
7 });    

 


参数 options

  •  viewMode :定义cropper的视图模式

默认:0

0:没有限制,3可以移动到2外。

1 : 3只能在2内移动。 

2:2图片 不全部铺满1 (即缩小时可以有一边出现空隙)

3:2图片填充整个1

 

  •  dragMode :定义cropper的拖拽模式

默认: ‘crop’

‘crop’:可以产生一个新的裁剪框3

‘move’:只可以移动3

‘none’:什么也不处理

  •  aspectRatio :裁剪框的宽高比

默认:NAN;

在默认的时候可以随意改变裁剪框的大小,我这里的设置的值为 16/9。

  •  preview :添加额外的元素(容器)以供预览

默认:“ ”;

注意这里是一个dom元素,必须可以被Document.querySelectorAll获取到。

 preview:".small"  ,

 <div class="small"></div> 

一定要设置small的宽高,如果想显示出裁剪的区域需要加上样式 overflow: hidden;

  • data如果已经存储了以前的数据,那么在构建时将会自动将其传递给setData方法。

    默认:null;

  • responsive:在调整窗口大小的时候重新渲染cropper

默认:true;

  • restore:在调整窗口大小后恢复裁剪的区域

默认:true;

  • checkCrossOrigin:检查当前图像是否为跨域图像

默认:true;

  • checkOrientation:检查当前图像的Exif定向信息

默认:true;

  • modal:显示图片上方的黑色模态并在裁剪框下面

默认:true;

  • guides:显示在裁剪框上方的虚线

默认:true;

  • center:裁剪框在图片正中心

默认:true;

  • highlight:在裁剪框上方显示白色的区域(突出裁剪框)

默认:true;

  • background:显示容器的网格背景

就是后面的马赛克

默认:true;

  • autoCrop:当初始化时,可以自动生成图像

就是自动显示裁剪框,改成false裁剪框自动消失

默认:true;

  • autoCropArea:定义自动裁剪面积大小(百分比)和图片进行对比

默认:0.8;

就是裁剪框显示的大小

  • movable:是否允许可以移动后面的图片

默认:true;

  • rotatable:是否允许旋转图像

默认:true;

  • scalable:是否允许缩放图像

默认:true;

  • zoomable:是否允许放大图像

默认:true;

  • zoomOnTouch:是否可以通过拖动触摸来放大图像

默认:true;

  • zoomOnWheel:是否可以通过移动鼠标来放大图像

默认:true;

  • wheelZoomRatio:用鼠标移动图像时,定义缩放比例

默认:0.1;

  • cropBoxMovable:是否通过拖拽来移动剪裁框

默认:true;

改成false效果图为:剪裁框不可以拖动

  • cropBoxResizable:是否通过拖动来调整剪裁框的大小

默认:true;

改成false效果图为:剪裁框不可以调整大小

  • toggleDragModeOnDblclick:当点击两次时可以在“crop”和“move”之间切换拖拽模式

默认:true;

  • minContainerWidth:容器的最小宽度

默认:200;

  • minContainerHeight:容器的最小高度

默认:100;

  • minCanvasWidth:canvas的最小宽度

默认:0;

  • minCanvasHeight:canvas的最小高度

默认:0;

  • minCropBoxWidth:裁剪层的最小宽度

默认:0;

  • minCropBoxHeight:裁剪层的最小高度

默认:0;

  • ready:插件准备完成执行的函数(只执行一次)

类型:Functio

默认:null;

  • cropstart:剪裁框开始移动执行的函数

类型:Function

默认:null;

  • cropmove:剪裁框移动时执行的函数

类型:Function

默认:null;

  • cropend:剪裁框移动结束执行的函数

类型:Function

默认:null;

  • crop:剪裁框发生变化执行的函数

类型:Function

默认:null;

  • zoom:剪裁框缩放的时候执行的函数

类型:Function

默认:null;


 

Methods 方法

  • crop() :手动显示裁剪框
1 $("#image").cropper({
2   autoCrop: false, //关闭自动显示裁剪框
3   ready: function () {
4     $(this).cropper(\'crop\');
5   }
6 });
  • reset():

将图像和裁剪框重置为初始状态

  • clear():

清除裁切框

  • replace(url[, onlyColorChanged]):

替换图像的src并重新构建cropper

url :类型String:新图片的url

onlyColorChanged (optional) :类型Boolean,默认false;

如果只是改变颜色,而不是大小,那么cropper只需要改变所有相关图像的src,不需要重新构建cropper。这可以用于应用过滤器。

(意思是:改成true,图像的比例会发生变化自适应父盒子的大小,会失真)

1     $("#replace").on("click", function () {
2         $(\'#image\').cropper(\'replace\',"./images/111.jpeg",true );
3     })
  • enable():

解锁,锁定的裁切框(与disable相对应)

  • disable():

锁定的裁切框(裁切框不可移动)(与enable相对应)

  • destroy():

销毁cropper并从图像中删除整个cropper

  • move(offsetX[, offsetY]):

使用相对偏移量移动图像(裁切框不移动)

  • moveTo(x[, y]):

将画布(图像包装器)移动到一个绝对点

  • zoom(ratio):

放大图片,并使用相对比例(裁切框不变化)

  • zoomTo(ratio):

将画布(图像包装器)放大到一个绝对比例

  • rotate(degree):

旋转图像以一定的角度

  • rotateTo(degree):

旋转图像到固定的角度

  • scale(scaleX[, scaleY]):

翻转图像

  • scaleX:

类型Number;水平方向翻转;默认为 1

  • scaleY:

类型Number;垂直方向翻转;如果不存在,其值和scaleX相同;

1 $(\'#image\').cropper(\'scale\', -1); // 水平、垂直方向翻转
2 $(\'#image\').cropper(\'scale\', -1, 1); // 水平方向翻转
3 $(\'#image\').cropper(\'scale\', 1, -1); // 垂直方向翻转
  • scaleX(scaleX):

缩放图像的横坐标

  • scaleY(scaleY):

缩放图像的纵坐标

  • getData([rounded]):

输出最终裁剪的区域位置和大小数据(根据原始图像的自然大小)

rounded 类型Boolean;默认false;设置true可以获取其所有数据;

返回的数据类型:Object;

裁切框距离左边的距离

裁切框距离顶部的距离

width 裁切框的宽度

height 裁切框的高度

rotate 裁切框的旋转的角度

scaleX 缩放图像的横坐标

scaleY 缩放图像的纵坐标

1     $("#getData").on("click", function () {
2         console.log($(\'#image\').cropper(\'getData\', true));;
3     })
  • setData(data):

用新数据改变裁切区域的位置和大小(以原始图像为基础)

  • getContainerData():

输出container 容器大小数据

  • getImageData():输出图像image位置、大小和其他相关数据

返回的数据类型:Object;

leftimage 距离左边的距离

topimage 距离顶部的距离

width  image的宽度

height  image的高度

naturalWidth  image的原始宽度

naturalHeight  image的原始高度

aspectRatio  image的纵横比

rotate  image的旋转的角度

scaleX 缩放图像的横坐标

scaleY 缩放图像的纵坐标

1     $("#getImageData").on("click", function () {
2         console.log($(\'#image\').cropper(\'getImageData\', ));;
3     })
  • getCanvasData():输出画布Canvas(图像包装器)位置和大小数据

返回的数据类型:Object;

leftcanvas 距离左边的距离

topcanvas 距离顶部的距离

width  canvas的宽度

height  canvas的高度

naturalWidth  canvas的原始宽度

naturalHeight  canvas的原始高度

注意:getImageData() 和 getCanvasData()的 naturalWidth、naturalHeight的值是一样的

  • setCanvasData(data):

使用数据更改画布Canvas(图像包装器)位置和大小

  • getCropBoxData():

输出剪切框的位置和大小数据

  • setCropBoxData(data):

改变剪切框的位置和大小数据

  • getCroppedCanvas([options]):画一张剪裁的图片,如果没有剪裁,则返回一个绘制整个im的画布

options  类型Object

width  输出Canvas的宽度

height  输出Canvas的高度

minWidth  输出Canvas的最小宽度;默认值是0

minHeight  输出Canvas的最小高度;默认值是0

maxWidth  输出Canvas的最大宽度;默认值是Infinity(无穷大)

maxHeight  输出Canvas的最大高度;默认值是Infinity(无穷大)

fillColor  在输出画布Canvas中填充任何alpha的颜色,默认值是透明的

imageSmoothingEnabled  如果图像被设置为平滑(true,默认)或不设置(false)。

imageSmoothingQuality  设置图像的质量,一个“low”(默认)、“medium”或“high”。

返回值类型:HTMLCanvasElement

画布绘制出了剪裁过的图像

注意:输出canvas画布的宽高比将自动适应剪切框的纵横比

    • 如果您打算从输出画布canvas中获得一个JPEG图像,您应该首先设置填色选项,否则,JPEG图像中的透明部分将在缺少情况下变为黑色。

为了避免获得空白的输出图像,您可能需要将maxWidth和maxHeightproperties设置为有限的数字,从而来画布元素的大小限制。

 1     $("#getCroppedCanvas").on("click", function () {
 2         console.log($(\'#image\').cropper(\'getCroppedCanvas\'));;
 3         var cas=$(\'#image\').cropper(\'getCroppedCanvas\');
 4         var base64url=cas.toDataURL(\'image/jpeg\');
 5         cas.toBlob(function (e) {
 6             console.log(e);  //生成Blob的图片格式
 7         })
 8         console.log(base64url); //生成base64图片的格式
 9         $(\'.cavans\').html(cas)  //在body显示出canvas元素
10     })
 1 $(\'#image\').cropper(\'getCroppedCanvas\', {
 2   width: 160,
 3   height: 90,
 4   minWidth: 256,
 5   minHeight: 256,
 6   maxWidth: 4096,
 7   maxHeight: 4096,
 8   fillColor: \'#fff\',
 9   imageSmoothingEnabled: false,
10   imageSmoothingQuality: \'high\',
11 });
12 
13 // Upload cropped image to server if the browser supports `HTMLCanvasElement.toBlob`
14 $(\'#image\').cropper(\'getCroppedCanvas\').toBlob(function (blob) {
15   var formData = new FormData();
16   formData.append(\'croppedImage\', blob);
17   $.ajax(\'/path/to/upload\', {
18     method: "POST",
19     data: formData,
20     processData: false,
21     contentType: false,
22     success: function () {
23       console.log(\'Upload success\');
24     },
25     error: function () {
26       console.log(\'Upload error\');
27     }
28   });
29 });
  • setAspectRatio(aspectRatio):

改变裁切框的宽高比

  • setDragMode([mode]):设置拖拽模式

就是鼠标显示的是十字还是那种带箭头的十字

mode 类型String

取值:none、crop、move;

默认none


Events事件

  • ready:

当一个cropper实例完全构建时,这个事件就会发生

  • cropstart:当画布(图像包装器)或剪切框开始发生变化时,该事件就会发生

返回的参数有:

event.originalEvent 类型event;

mousedown touchstartpointerdown 即触发的事件源

event.action 发生事件的行为(移动的方向):

crop :创建一个剪切框的时候

move :移动图片的时

zoom :放大缩小canvas的时候

:调整剪切框东侧的大小

:调整剪切框西侧的大小

:调整剪切框南侧的大小

:调整剪切框北侧的大小

se :东南

sw :西南

ne :东北

nw :西北

all :所有方向

 1 $(\'#image\').on(\'cropstart\', function (e) {
 2   console.log(e.type); // cropstart
 3   console.log(e.namespace); // cropper
 4   console.log(e.action); // ...
 5   console.log(e.originalEvent.pageX);
 6 
 7   // Prevent to start cropping, moving, etc if necessary
 8   if (e.action === \'crop\') {
 9     e.preventDefault();
10   }
11 });
  • cropmove:

当画布(图像包装器)或剪切框正在发生变化时,该事件就会发生

  • cropend:

当画布(图像包装器)或剪切框正在发生变化结束时,该事件就会发生

  • crop:

当画布(图像包装器)或农作物盒发生改变时,该事件就会发生

  • zoom:

当一个cropper实例开始放大或缩小画布(图像包装器)时,这个事件就会发生