添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
·  阅读

先来看效果

它可以实现图片的放大、缩小、旋转、拖动和裁剪等效果。


引入必要的js和css核心文件

<link rel="stylesheet" href="https://cdn.bootcss.com/cropperjs/2.0.0-alpha.1/cropper.css">
<script src="https://cdn.bootcss.com/cropperjs/2.0.0-alpha.1/cropper.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.min.js"></script>复制代码

构建html

基础代码

<label title="上传图片" for="chooseImg" class="l-btn choose-btn">
   <input type="file" accept="image/jpg,image/jpeg,image/png" name="file" id="chooseImg" class="hidden" onchange="selectImg(this)" />     
</label>
<div class="str">
    <img id="fileImg" src="" width="100%">
</div>复制代码

<!--图片裁剪框 start-->
<div style="display: none" class="tailoring-container"> 
    <div class="black-cloth" onclick="closeTailor(this)"></div>        
<div class="tailoring-content">            
    <div class="tailoring-content-one">                
        <div class="close-tailoring" onclick="closeTailor(this)">×</div>            
    </div>            
    <div class="tailoring-content-two">
        <div class="tailoring-box-parcel">
            <img id="tailoringImg">
        </div>                
<div class="preview-box-parcel">                    
<p>图片预览:</p>                    
<div class="square previewImg"></div>                    
<!--  <div class="circular previewImg"></div>-->                
</div>           
 </div>           
 <div class="tailoring-content-three">                
    <button class="l-btn cropper-reset-btn">复位</button>                
    <button class="l-btn cropper-rotate-btn">旋转</button>                
    <button class="l-btn cropper-scaleX-btn">换向</button>                
    <button class="l-btn cropper-enlarge-btn">放大</button>                
    <button class="l-btn cropper-narrow-btn">缩小</button>                
    <button class="l-btn sureCut" id="sureCut">确定</button>            
    </div>        
</div>    
</div>复制代码

初始化插件及相关参数

var cropper =  new Cropper($('#tailoringImg')[0],{            
    aspectRatio: 1 / 1,// 默认比例              
    preview: '.previewImg',// 预览视图              
    guides: false, // 裁剪框的虚线(九宫格)              
    autoCropArea: 0.5, // 0-1之间的数值,定义自动剪裁区域的大小,默认0.8              
    movable: false, // 是否允许移动图片              
    dragCrop: true, // 是否允许移除当前的剪裁框,并通过拖动来新建一个剪裁框区域              
    movable: true, // 是否允许移动剪裁框              
    resizable: true, // 是否允许改变裁剪框的大小             
    scalable:false, //是否可以缩放图片             
    zoomable: true, // 是否允许缩放图片大小              
    mouseWheelZoom: false, // 是否允许通过鼠标滚轮来缩放图片              
    touchDragZoom: false, // 是否允许通过触摸移动来缩放图片              
    rotatable: true, // 是否允许旋转图片             
    crop: function (e) {                
        let cas = cropper.getCroppedCanvas();// 获取被裁剪后的canvas                  
        let base64 = cas.toDataURL('image/jpeg'); // 转换为base64                  
        $("#finalImg").prop("src", base64);// 显示图片                  
        // 输出结果数据裁剪图像。              
});复制代码
// 选择文件触发事件          
function selectImg(file) {            
    //文件为空,返回              
    if (!file.files || !file.files[0]) {                
        return;            
    $(".tailoring-container").toggle();
    var reader = new FileReader();            
    reader.onload = function (evt) {                
        console.log(evt,cropper,'./.evt.target.result')                
        var replaceSrc = evt.target.result;                
        // 更换cropper的图片                  
        cropper.replace(replaceSrc, false);// 默认false,适应高度,不失真              
    reader.readAsDataURL(file.files[0]);        
}复制代码

// 旋转          
$(".cropper-rotate-btn").on("click", function () {            
    cropper.rotate(45);        
// 复位          
$(".cropper-reset-btn").on("click", function () {            
    cropper.reset();        
// 放大        
$('.cropper-enlarge-btn').on('click',function(){            
    console.log(cropper,'cropper---enlarge')            
    cropper.zoom(2);        
// 缩小        
$('.cropper-narrow-btn').on('click',function(){            
    console.log(cropper,'cropper---narrow')            
    cropper.zoom(-2);            
// 换向          
var flagX = true;        
$(".cropper-scaleX-btn").on("click", function () {            
    if (flagX) {                
        cropper.scaleX(-1);                
        flagX = false;            
    } else {                
        cropper.scaleX(1);                
        flagX = true;            
    flagX != flagX;
// 关闭裁剪框          
function closeTailor() {            
    $(".tailoring-container").toggle();        
复制代码

基础配置说明

参数

  • aspectRatio:类型:Number,默认值NaN。设置剪裁容器的比例。

  • crop:类型:Function,默认值null。当改变剪裁容器或图片时的事件函数。

  • preview:类型:String(jQuery选择器),默认值''。添加额外的元素(容器)的预览。注意:

  • 最大宽度是剪裁容器的初始化宽度

  • 最大高度是剪裁容器的初始化高度

  • 如果你设置了aspectRatio参数,确保预览容器具有相同的比例

  • strict:类型:Boolean,默认值true。在strict模式中,canvas不能小于容器,剪裁容器不能再canvas之外。

  • responsive:类型:Boolean,默认值true。是否在窗口尺寸改变的时候重置cropper。

  • checkImageOrigin:类型:Boolean,默认值true。默认情况下,插件会检测图片的源,如果是跨域图片,图片元素会被添加crossOrigin class,并会为图片的url添加一个时间戳来使getCroppedCanvas变为可用。添加时间戳会使图片重新加载,以使跨域图片能够使用getCroppedCanvas。在图片上添加crossOrigin class会阻止在图片url上添加时间戳,及图片的重新加载。

  • background:类型:Boolean,默认值true。是否在容器上显示网格背景。

  • modal:类型:Boolean,默认值true。是否在剪裁框上显示黑色的模态窗口。

  • guides:类型:Boolean,默认值true。是否在剪裁框上显示虚线。

  • highlight:类型:Boolean,默认值true。是否在剪裁框上显示白色的模态窗口。

  • autoCrop:类型:Boolean,默认值true。是否在初始化时允许自动剪裁图片。

  • autoCropArea:类型:Number,默认值0.8(图片的80%)。0-1之间的数值,定义自动剪裁区域的大小。

  • dragCrop:类型:Boolean,默认值true。是否允许移除当前的剪裁框,并通过拖动来新建一个剪裁框区域。

  • movable:类型:Boolean,默认值true。是否允许移动剪裁框。

  • resizable:类型:Boolean,默认值true。是否允许改变剪裁框的大小。

  • zoomable:类型:Boolean,默认值true。是否允许放大缩小图片。

  • mouseWheelZoom:类型:Boolean,默认值true。是否允许通过鼠标滚轮来缩放图片。

  • touchDragZoom:类型:Boolean,默认值true。是否允许通过触摸移动来缩放图片。

  • rotatable:类型:Boolean,默认值true。是否允许旋转图片。

  • minContainerWidth:类型:Number,默认值200。容器的最小宽度。

  • minContainerHeight:类型:Number,默认值100。容器的最小高度。

  • minCanvasWidth:类型:Number,默认值0。canvas 的最小宽度(image wrapper)。

  • minCanvasHeight:类型:Number,默认值0。canvas 的最小高度(image wrapper)。

  • build:类型:Function,默认值null。build.cropper事件的简写方式。

  • built:类型:Function,默认值null。built.cropper事件的简写方式。

  • dragstart:类型:Function,默认值null。dragstart.cropper事件的简写方式。

  • dragmove:类型:Function,默认值null。dragmove.cropper事件的简写方式。

  • dragend:类型:Function,默认值null。dragend.cropper事件的简写方式。

  • zoomin:类型:Function,默认值null。zoomin.cropper事件的简写方式。

  • zoomout:类型:Function,默认值null。zoomout.cropper事件的简写方式。

方法

  • cropper.reset() 将图像以及裁剪重置为初始状态
  • cropper.clear() 清除裁剪框
  • cropper.replace("图片路径",false); 替换图片,参数1:替换的图片,参数二,boolean是否保持原来的比例
  • cropper.enable() 解锁
  • cropper.disable() 锁定
  • cropper.destroy() 销毁cropper,并在图像中将整个cropper销毁(将插件销毁)
  • cropper.move(offsetX, offsetY)移动x轴/y轴坐标,移动图片.相对自己的位置
  • cropper.moveTo(2,0)移动到x,有一个具体的坐标
  • cropper.moveTo(0,2) 移动到y
  • cropper.zoom(0.1 ) 放大
  • cropper.zoom(-0.1) 缩小
  • cropper.zoomTo(2)  放大到,原来的两倍
  • cropper.zoomTo(0.2)  缩小到
  • cropper.rotate(-45) 逆时针旋转,度数
  • cropper.rotate(45) 顺时针旋转(正数)
  • cropper.rotate(-45) 逆时针旋转到(正数)
  • cropper.rotate(45)  顺时针旋转(正数)
  • cropper.scale(-1,1) 沿y轴翻转,当前轴不变,另一轴为-1
  • cropper.scale(1,-1) 沿x轴翻转
  • cropper.scale(-1)   缩放图片x坐标
  • cropper.scaleX(0.5) 缩放图片X坐标
  • cropper.scaleY(2)  缩放图片Y坐标
  • cropper.getData()  获取数据信息(裁剪框的数据)
  • cropper.setData({width:200,height:100})  获取数据信息(裁剪框的数据)
  • cropper.getContainerData() 获取Container的数据信息,没有setContainerData函数
  • cropper.getImageData()   获取image的数据信息,就是图片大小
  • cropper.getCanvasData()  获取Canvas的数据信息
  • cropper.setCanvasData({left:0,top:0,width:200,height:200})  设置Canvas的数据信息
  • cropper.getCropBoxData() 获得裁剪框的详细数据
  • cropper.setCropBoxData({left:0,top:100,width:00,height:200})  获得裁剪框的详细数据
  • cropper.getCroppedCanvas()  获得裁剪后的图片,裁剪后的base64编码
  • cropper.setAspectRatio(1/1)   修改裁剪框的长宽比
  • cropper.setDragMode("crop")  设置拖拽模式,none,crop,move
  • cropper.getCroppedCanvas()   获取canvas绘制的剪裁图像。 在这之后,你可以直接将canvas作为图片显示,或使用canvas.toDataURL方法获取图像的数据链接,或者使用canvas.toBlob方法获取一个blob,并通过FormData方法将它更新到服务器上(如果浏览器支持这些API)


分类:
前端
  •