cropper实现基本的裁剪图片并上传
使用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实现基本的裁剪图片并上传的更多相关文章
- HTML5裁剪图片并上传至服务器实现原理讲解
HTML5裁剪图片并上传至服务器实现原理讲解 经常做项目需要本地上传图片裁剪并上传服务器,比如会议头像等功能,但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁 ...
- HTML5 本地裁剪图片并上传至服务器(转)
很多情况下用户上传的图片都需要经过裁剪,比如头像啊什么的.但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁剪坐标,发送给服务器,服务器裁剪完再返回给用户,来回需要 ...
- 微信小程序裁剪图片后上传
上传图片的时候调起裁剪页面,裁剪后再回调完成上传; 图片裁剪直接用we-cropper https://github.com/we-plugin/we-cropper we-cropper使用详细 ...
- PHP裁剪图片并上传完整demo
日前根据功能需求,要做一个图片裁剪上传的功能,在网上找了好久,找到了这位仁兄写的demo! 下载压缩包
- base64字符串转文件,以及ngImgCrop裁剪图片并上传保存到服务器示例
base64字符串是包含文件格式的文件字符串,例如:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAgAElE ...
- jquery photoClip支持手机端,PC端 本地裁剪图片后上传插件
支持手机,PC最好的是jquery photoClip插件,下载地址&示例:https://github.com/topoadmin/photoClip demo.html 代码: <! ...
- ASP.NET MVC4使用JCrop裁剪图片并上传
需要用到的jquery插件Jcrop .Jquery.form 百度webuploader插件( http://fex.baidu.com/webuploader/ ) 引用下载好的css和js文件 ...
- 小程序踩坑记录-上传图片及canvas裁剪图片后上传至服务器
最近在写微信小程序的上传图片功能,趟过了一些坑记录一下. 想要满足的需求是,从手机端上传图片至服务器,为了避免图片过大影响传输效率,需要把图片裁剪至适当大小后再传输 主要思路是,通过wx.choose ...
- 图片剪裁上传插件 - cropper
图片剪裁上传插件 - cropper <style> .photo-container{float: left;width: 300px;height: 300px;} .photo-co ...
随机推荐
- c++编程之内存的分配
当我们在进行编程时,特别是使用c++语言进行编程时,需要知道内存有几个内存区可供我们使用,因为c++可以直接操作内存.接下让我们来看看内存中的几大内存区. 1.栈区 栈区(stack)是速度最快的一个 ...
- VSCode配置Git随记
VSCode配置Git随记 2018年05月29日 10:14:24 Dominic- 阅读数:4096 vscode中对git进行了集成,很多操作只需点击就能操作,无需写一些git指令. 不过这 ...
- [P4318] 完全平方数
想不出什么办法能直接算的(别跟我提分块打表),不如二分答案吧:设\(f(x)=\sum_{i=1}^n [i不是"完全平方数"]\), 显然f(x)与x正相关.再结合筛法.容斥,不 ...
- ThreadLocal父子线程传递实现方案
介绍InheritableThreadLocal之前,假设对 ThreadLocal 已经有了一定的理解,比如基本概念,原理,如果没有,可以参考:ThreadLocal源码分析解密.在讲解之前我们先列 ...
- BitMap位图与海量数据的理解与应用
1. Bit Map算法简介 来自于<编程珠玑>.所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素.由于采用了Bit为单位来存储数据,因此在存储空 ...
- linux arm 交叉编译ACE(ubuntu16.04)
解压ace包 tar zxvf ACE_6.1.0.tar.gz 在终端设置环境变量 sudo gedit /etc/profile 在打开的内容添加 export ACE_ROOT=/home/xx ...
- Xcode 8.X Command Line Tools
Summary Step 1. Upgrade Your System to macOS Sierra Step 2. Open the Terminal Application Step 3. Is ...
- JavaScript实现iphone时钟
看效果(欢迎各位同学推荐更好的gif制作软件) 请看代码 <!DOCTYPE html> <html lang="en"> <head> < ...
- SpringBoot入门之Thymeleaf的使用
在.net的MVC3 或更高版本等支持 Razor 的框架里使用cshtml,Razor是一种简单的编程语法,用于在网页中嵌入服务器端代码.在使用springboot开发mvc时也有与.net类似的视 ...
- c++中运算符重载
c++语言中运算符重载都是通过函数来实现的,所以其实质为函数重载,当c++语言原有的一个运算符被重载之后,它原来所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符. <1> ...