使用cropper之前需要先引用 cropper.css 和 cropper.js

cropper 官网:https://fengyuanchen.github.io/cropper/

cropper.css下载:https://github.com/fengyuanchen/cropperjs/tree/master/docs/css

cropper.js下载:https://github.com/fengyuanchen/cropperjs/tree/master/docs/js

然后我们来了解一下cropper的基本属性及方法

参数options

   1. viewMode(定义cropper的视图模式)

类型:number;默认:0;可以使用0,1,2,3;

0:没有限制,3可以移动到2外。
  
1 : 3只能在2内移动。
  
2:2图片 不全部铺满1 (即缩小时可以有一边出现空隙)
  
3:2图片填充整个1

   2. dragMode (定义cropper的拖拽模式)

类型: String
 
默认: ‘crop’
 
选项:
 
‘crop’: 可以产生一个新的裁剪框3
 
‘move’: 只可以移动3
 
‘none’: 什么也不处理

   3. aspectRatio—-裁剪框的宽高比

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

   4. data—如果您已经存储了以前的数据,那么在构建时将会自动将其传递给setData方法。(具体怎么用还不知道)

   5. preview—-添加额外的元素(容器)以供预览

类型:Element / String 默认:“ ”;
 
注意这里是一个dom元素。必须可以被Document.querySelectorAll获取到;
 
preview:".small",
 
HTML结构:<div class="small"></div>;注意一定要设置small的宽高;最好和裁剪比例一致;还有如果要想正确的显示出裁剪的区域需要加上样式overflow: hidden;

  6. center—裁剪框在图片正中心。

  7. background–显示容器的网格背景。(就是后面的马赛克)

  8. rotatable–是否允许旋转图像。

  9. scalable–是否允许缩放图像。

  10. zoomable–是否允许放大图像。

  11. ready—插件准备完成执行的函数(只执行一次)。

  12. crop—剪裁框发生变化执行的函数。

  13. zoom—剪裁框缩放的时候执行的函数。

Methods 方法

使用方法示例:
$().cropper({
ready: function () {
$().cropper('method', argument1, , argument2, ..., argumentN);
}
}); 1. crop 手动显示裁剪框
  $("#image").cropper({
    autoCrop: false, //关闭自动显示裁剪框
    ready: function () {
      $(this).cropper('crop');
    }
  });

2 . reset—-将图像和裁剪框重置为初始状态
  $("#reset").on("click", function () {
$('#image').cropper('reset');
})
3 . clear—清除裁切框
  $("#clear").on("click", function () {
$('#image').cropper('clear');
})
4. replace(url[, onlyColorChanged])—替换图像的src并重新构建cropper
  $("#replace").on("click", function () {
    $('#image').cropper('replace',"./images/111.jpeg",true );
  })
5. enable()—解锁,锁定的裁切框(与disable相对应)
  
$("#enable").on("click", function () {
    $('#image').cropper('enable');
  })

6 . disable()—锁定的裁切框(裁切框不可移动)(与enable相对应)
  $("#disable").on("click", function () {
$('#image').cropper('disable');
})
7.destroy()—销毁cropper并从图像中删除整个cropper。
  $("#destroy").on("click", function () {
    $('#image').cropper('destroy');
  })


代码示例: 
  <style> 
    .row{
      margin-bottom: 5px;
    }
    #photo {
      max-width: 100%;
    }
    .img-preview {
      width: 100px;
      height: 100px;
      overflow: hidden;
    }
    button {
      margin-top:10px;
    }
    #result {
      width: 150px;
      height: 150px;
    }
  </style>

  <div class="row">
<div class="col-sm-12 text-center">
<label for="input" class="btn btn-danger" id="">
<span>选择图片</span>
<input type="file" id="input" class="sr-only">
</label>
</div>
</div>
<div class="row">
<div class="col-sm-6 col-sm-offset-2">
<img src="" id="photo">
</div>
<div class="col-sm-2">
<div>
<p>
预览(100*100):
</p>
<div class="img-preview">
</div>
</div>
<button class="btn btn-primary" onclick="crop()">裁剪图片</button>
<div>
<br/>
<p>
结果:
</p>
<img src="" alt="裁剪结果" id="result">
</div>
</div>
</div>
  <script>
// 修改自官方demo的js
var initCropper = function (img, input){
var $image = img;
var options = {
aspectRatio: 1, // 纵横比
viewMode: 2,
preview: '.img-preview' // 预览图的class名
};
$image.cropper(options);
var $inputImage = input;
var uploadedImageURL;
if (URL) {
// 给input添加监听
$inputImage.change(function () {
var files = this.files;
var file;
if (!$image.data('cropper')) {
return;
}
if (files && files.length) {
file = files[0];
// 判断是否是图像文件
if (/^image\/\w+$/.test(file.type)) {
// 如果URL已存在就先释放
if (uploadedImageURL) {
URL.revokeObjectURL(uploadedImageURL);
}
uploadedImageURL = URL.createObjectURL(file);
// 销毁cropper后更改src属性再重新创建cropper
$image.cropper('destroy').attr('src', uploadedImageURL).cropper(options);
$inputImage.val('');
} else {
window.alert('请选择一个图像文件!');
}
}
});
} else {
$inputImage.prop('disabled', true).addClass('disabled');
}
}
var crop = function () {
            var photo = $('#photo').cropper('getCroppedCanvas', {
                 // 裁剪后的长宽
                height: 160
            }).toDataURL('image/png');
            console.log(photo);
            $.ajax({
                url: '/Attachment/Uploadphoto', // 要上传的地址
                method: 'post',
                data: { dataURL:photo },
                success: function (data) {
                    $('#result').attr('src', data).show();
                    $('#img').val(data);
                },
                error: function (data) {
                    alert(data);
                }
            });
        }
$(function(){
initCropper($('#photo'),$('#input'));
});
</script>
后台代码:
   /// <summary>
        /// 上传裁剪图片(头像)
        /// </summary>
        /// <param name="dataURL"></param>
        /// <returns></returns>
        public ActionResult Uploadphoto(string dataURL)
        {
            //将‘,’以前的多余字符串去除
            string base64 = dataURL.Substring(dataURL.IndexOf(",") + 1);
            byte[] bytearr = Convert.FromBase64String(base64);
            MemoryStream ms = new MemoryStream(bytearr);
            //将MemoryStream对象转换成Bitmap对象
            Bitmap bmp = new Bitmap(ms);
            //关闭流
            ms.Close();
            string dir = DateTime.Now.ToString("yyyyMMdd");
            string abpath = Server.MapPath($"/upload/{dir}/");
            if (!Directory.Exists(abpath))
            {
                Directory.CreateDirectory(abpath);
            }
            string newname = Guid.NewGuid().ToString().Substring(0, 6) + ".png";             bmp.Save(abpath + newname, System.Drawing.Imaging.ImageFormat.Png);             return Content($"/upload/{dir}/{newname}");
        }

cropper实现基本的裁剪图片并上传的更多相关文章

  1. HTML5裁剪图片并上传至服务器实现原理讲解

    HTML5裁剪图片并上传至服务器实现原理讲解   经常做项目需要本地上传图片裁剪并上传服务器,比如会议头像等功能,但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁 ...

  2. HTML5 本地裁剪图片并上传至服务器(转)

    很多情况下用户上传的图片都需要经过裁剪,比如头像啊什么的.但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁剪坐标,发送给服务器,服务器裁剪完再返回给用户,来回需要 ...

  3. 微信小程序裁剪图片后上传

    上传图片的时候调起裁剪页面,裁剪后再回调完成上传; 图片裁剪直接用we-cropper   https://github.com/we-plugin/we-cropper we-cropper使用详细 ...

  4. PHP裁剪图片并上传完整demo

    日前根据功能需求,要做一个图片裁剪上传的功能,在网上找了好久,找到了这位仁兄写的demo! 下载压缩包

  5. base64字符串转文件,以及ngImgCrop裁剪图片并上传保存到服务器示例

    base64字符串是包含文件格式的文件字符串,例如:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAgAElE ...

  6. jquery photoClip支持手机端,PC端 本地裁剪图片后上传插件

    支持手机,PC最好的是jquery photoClip插件,下载地址&示例:https://github.com/topoadmin/photoClip demo.html 代码: <! ...

  7. ASP.NET MVC4使用JCrop裁剪图片并上传

    需要用到的jquery插件Jcrop .Jquery.form 百度webuploader插件( http://fex.baidu.com/webuploader/ ) 引用下载好的css和js文件 ...

  8. 小程序踩坑记录-上传图片及canvas裁剪图片后上传至服务器

    最近在写微信小程序的上传图片功能,趟过了一些坑记录一下. 想要满足的需求是,从手机端上传图片至服务器,为了避免图片过大影响传输效率,需要把图片裁剪至适当大小后再传输 主要思路是,通过wx.choose ...

  9. 图片剪裁上传插件 - cropper

    图片剪裁上传插件 - cropper <style> .photo-container{float: left;width: 300px;height: 300px;} .photo-co ...

随机推荐

  1. 深入浅出分析MySQL MyISAM与INNODB索引原理、优缺点分析

    本文浅显的分析了MySQL索引的原理及针对主程面试的一些问题,对各种资料进行了分析总结,分享给大家,希望祝大家早上走上属于自己的"成金之路". 学习知识最好的方式是带着问题去研究所 ...

  2. Java 动态生成 PDF 文件

    每片文章前来首小诗:   今日夕阳伴薄雾,印着雪墙笑开颜.我心仿佛出窗前,浮在半腰望西天.  --泥沙砖瓦浆木匠 需求: 项目里面有需要java动态生成 PDF 文件,提供下载.今天我找了下有关了,系 ...

  3. docker 安全

    由于容器运行在主机上,且与主机共用一套内核,因此在容器的安全使用上会涉及到容器本身以及主机的安全加固,如针对系统调用,系统资源,远程访问等都需要进行安全方面的考量. docker官网给出了简单的一些建 ...

  4. SQL 必知必会·笔记<4>使用通配符过滤数据

    LIKE操作符 通配符(wildcard): 用来匹配值的一部分的特殊字符. 百分号(%)通配符 最常使用的通配符是百分号(%).在搜索串中,%表示任何字符出现任意次数: SELECT prod_id ...

  5. SpringBoot2.0源码分析(二):整合ActiveMQ分析

    SpringBoot具体整合ActiveMQ可参考:SpringBoot2.0应用(二):SpringBoot2.0整合ActiveMQ ActiveMQ自动注入 当项目中存在javax.jms.Me ...

  6. 复刻smartbits的国产网络测试工具minismb简介

           复刻smartbits的国产网络性能测试工具minismb,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具测试任何ip网络设备的端口吞吐率,带 ...

  7. 深入理解苹果系统(Unicode)字符串的排序方法

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由iminder发表于云+社区专栏 Unicode编码 我们知道计算机是不能直接处理文本的,而是和数字打交道.因此,为了表示文本,就建立 ...

  8. scikit-learn入门导航

    scikit-learn是一个非常强大的机器学习库, 提供了很多常见机器学习算法的实现. scikit-learn可以通过pip进行安装: pip install -U scikit-learn 不过 ...

  9. [转]Angular CLI 安装和使用

    本文转自:https://www.jianshu.com/p/327d88284abb 一. 背景介绍: 两个概念: 关于Angular版本,Angular官方已经统一命名Angular 1.x统称为 ...

  10. SQL Server 中的 NOLOCK 到底是什么意思?

    以前遇到过,但仅限于听同事说加上NOLOCK好一些,今天仔细研究测试了下,终于理解了,那么加与不加到底区别在哪呢? 我先说下其区别,之后再做测试. 大家都知道,每新建一个查询,都相当于创建一个会话,在 ...