cropbox.js 头像裁剪插件
cropbox.js
一个轻量级和简单的JavaScript,Jquery,YUI插件来裁剪您的头像。
特征
- 支持dataUrl显示图像(函数getDataURL)
- 支持Blob上传图片(函数getBlob)
主流的前端jQuery 图像裁剪插件有Jcrop和CropBox,前者是将原图和需要裁剪的参数(裁剪的各点坐标,旋转角度等)传到后台,然后由后台完成实际的裁剪和后续操作。 CropBox实现功能相对较少,但操作更简单,它的原理是: 将裁减后的图片通过base64编码,然后转化为blob格式发送到服务器,服务器完成解码即可,官网介绍可以看github上的说明和Demo 核心js函数只有两个: getDataURL 将裁剪后的图片简单以base64编码后的结果,用于实时预览,当然也可以将它直接传到服务器,然后解码为png格式 getBlob 上传图片为Blob格式 实现的效果:
前端代码:
<link rel="stylesheet" href="module/cropbox/cropbox.css" /> <script type="text/javascript" src="module/cropbox/cropbox.js"></script> <input name="userId" id="userId" type="hidden" value="1" /> <div class="container"> <div class="imageBox"> <div class="thumbBox"></div> <div class="spinner" style="display: none">Loading...</div> </div> <div class="action"> <div class="new-contentarea tc"> <a href="javascript:void(0)" class="upload-img"> <label for="avatar">上传图像</label> </a> <input type="file" class="" name="avatar" id="avatar" accept="image/*" /> </div> <input type="button" id="btnCrop" class="Btnsty_peyton" value="裁切" /> <input type="button" id="btnZoomIn" class="Btnsty_peyton" value="+" /> <input type="button" id="btnZoomOut" class="Btnsty_peyton" value="-" /> <input type="button" id="blobSubmit" class="Btnsty_peyton" value="提交" /> </div> <div class="cropped"></div> </div> <script> layui.use(['form', 'util', 'config', 'admin'], function () { var form = layui.form; var config = layui.config; var layer = layui.layer; var util = layui.util; var admin = layui.admin; var options = { thumbBox: '.thumbBox', spinner: '.spinner', imgSrc: '/assets/images/timg.jpg' } var cropper = $('.imageBox').cropbox(options); $('#avatar').on('change', function () { var reader = new FileReader(); reader.onload = function (e) { options.imgSrc = e.target.result; //根据MIME判断上传的文件是不是图片类型 if ((options.imgSrc).indexOf("image/") == -1) { parent.layer.alert("文件格式错误,请上传图片类型,如:JPG,JEPG,PNG后缀的文件。", { icon: 2, title: "系统提示" }); } else { cropper = $('.imageBox').cropbox(options); } } reader.readAsDataURL(this.files[0]); }) $('#blobSubmit').on('click', function () { var data = new Object(); data.image = cropper.getDataURL();//base64编码图片 data.userId = $("#userId").val();//用户id data.folder = "HeadImage";//文件夹 var sz = []; sz.push({ width: "180", height: "180" }); sz.push({ width: "128", height: "128" }); sz.push({ width: "64", height: "64" }); data.sizes = sz;//缩略图尺寸 var postdata = JSON.stringify(data); admin.req('sys/headimg', postdata, function (data) { console.log(data); alert('上传成功' + data.data); }, "POST", 'application/json'); }) $('#btnCrop').on('click', function () { var img = cropper.getDataURL(); $('.cropped').html(''); $('.cropped').append('<img src="' + img + '" align="absmiddle" style="width:64px;margin-top:4px;border-radius:64px;box-shadow:0px 0px 12px #7E7E7E;" ><p>64px*64px</p>'); $('.cropped').append('<img src="' + img + '" align="absmiddle" style="width:128px;margin-top:4px;border-radius:128px;box-shadow:0px 0px 12px #7E7E7E;"><p>128px*128px</p>'); $('.cropped').append('<img src="' + img + '" align="absmiddle" style="width:180px;margin-top:4px;border-radius:180px;box-shadow:0px 0px 12px #7E7E7E;"><p>180px*180px</p>'); }) $('#btnZoomIn').on('click', function () { cropper.zoomIn(); }) $('#btnZoomOut').on('click', function () { cropper.zoomOut(); }) }); </script>
WebApi代码:
/// <summary> /// 上传头像,返回头像路径 /// </summary> /// <param name="info">base64内容</param> /// <returns></returns> public PostResult<string> UploadHeadImage(UploadImageByBase64 info) { info.image.NotNullOrEmpty("没找到需要上传的文件"); if (info.sizes.Count == 0) throw new Exceptions.InvalidDataException("请传入图片规格列表"); var image = info.image; var match = System.Text.RegularExpressions.Regex.Match(image, "data:image/png;base64,([\\w\\W]*)$"); if (match.Success) { image = match.Groups[1].Value; } var domain = string.Empty; var folder = IO.Directory.GetCurrentDirectory() + "//wwwroot//upload/";//先保存到本地,然后云上传 //查询上传配置 var param = db.Queryable<sys_parameter>().First(c => c.key.Equals("upload")).value; var config = JsonHelper.Deserialize<UploadContent>(param); var type = "本地"; if (config.type == 0) { domain = config.local.domain + $"{info.folder}/";//返回域名 folder = config.local.path + $"{info.folder}/";//本地保存路径 } else if (config.type == 1) { type = "七牛云"; domain = config.qiniu.domain; } string filepath = Path.GetDirectoryName(folder); if (!Directory.Exists(filepath)) { if (filepath != null) Directory.CreateDirectory(filepath); } var photoBytes = Convert.FromBase64String(image); var list = new List<sys_uploadfile>(); var outfileNames = new List<string>();//上传成功的文件名集合 foreach (var item in info.sizes) { var filename = $"{info.userId}_{item.width}X{item.height}_{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.png"; ImageSharpHelper.Resize(photoBytes, folder + filename, item.width, item.height); if (config.type == 1) { QiniuCloudHelper.UploadOss(filename, folder, config.qiniu.ak, config.qiniu.sk);//七牛云上传 } list.Add(new sys_uploadfile { type = type, name = filename, folder = folder, extension = ".png", path = filename, url = domain + filename,//域名+文件名 size = "0",////字节 createAt = DateTime.Now, createid = 0 }); outfileNames.Add(domain + filename); } db.Insertable(list).ExecuteCommand(); return new PostResult<string> { data = string.Join(",", outfileNames), msg = "success" }; }
参考:https://www.cnblogs.com/xzwblog/p/6912320.html cropper(另一种方式截图):https://fly.layui.com/extend/croppers/
cropbox.js 头像裁剪插件的更多相关文章
- 基于jQuery头像裁剪插件cropbox
今天给大家分享一款基于jQuery头像裁剪插件cropbox,这是一款简单实用的jQuery头像在线裁剪插件.该插件适用于适用浏览器:IE8.360.FireFox.Chrome.Safari.Ope ...
- 如何用CropBox实现头像裁剪并与java后台交互
如何用CropBox实现头像裁剪并与java后台交互 参考网站:https://developer.mozilla.org/zh-CN/docs/Web/API/Blob 参考: http://blo ...
- 开源JS图片裁剪插件
开源JS图片裁剪插件 一.总结 一句话总结: 要用点赞最高的插件,这样适用性最好,效果最好,出问题的概率也最低,这里电脑端和手机端都可以用的建议用 cropper.js 二.5款好用的开源JS图片裁剪 ...
- jQuery实现用户头像裁剪插件cropbox.js
几乎每一个网页是必备图片上传,图片裁剪功能,这里通过cropbox.js插件实现该功能. <script src="js/jquery-1.11.1.min.js">& ...
- 第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传
第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传 实现原理 前台用cropper插件,将用户上传头像时裁剪图片的坐标和图片,传到逻辑处理 ...
- cropbox插件实现的头像裁剪效果
html代码 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...
- 【jQuery插件】使用cropper实现简单的头像裁剪并上传
插件介绍 这是一个我在写以前的项目的途中发现的一个国人写的jQuery图像裁剪插件,当时想实现用户资料的头像上传功能,并且能够预览图片,和对图片进行简单的裁剪.旋转,花了不少时间才看到了这个插件,感觉 ...
- 用JQuery仿造QQ头像裁剪功能
最近工作真心忙碌,几乎没时间写博客.今天趁周末来仿一个QQ头像裁剪功能插件.效果如下: 所有文件都可在我的Github上下载,从头到尾从简到繁按步骤一共分了9个HTML文件,每个步骤文件里的注释都写的 ...
- jfinal头像裁剪上传服务器
前端页面完整代码,复制可用,记得导入库文件 <!DOCTYPE html> <html lang="en"> <head> <title& ...
随机推荐
- mysqldump原理及实战
使用mysqldump命令行工具创建逻辑备份: 注意mysqldump的版本和路径mysqldump命令创建的是逻辑备份,结果集有两种格式:一种是将数据转换成标准的SQL语句(一堆CREATE,DRO ...
- 怎样设置Cookie
因为 Cookie 是服务器保存在浏览器中的一小段信息, 因此这个设置应当是服务器发起的, 设置方法是在Response Header中添加: Set-Cookie字段, 值是多个键值对. 如下: / ...
- promise, async和await
最开始实现异步的方法:回调函数 method1(function(err, result) { if (err) { throw err; } method2(function(err, result ...
- 使用XPath爬取网页数据
我们以我的博客为例,来爬取我所有写过的博客的标题. 首先,打开我的博客页面,右键“检查”开始进行网页分析.我们选中博客标题,再次右键“检查”即可找到标题相应的位置,我们继续点击右键,选择Copy,再点 ...
- Advanced Installer 关于桌面的快捷方式。
由于软件自动生成快捷方式,我发现桌面可以存在多个软件的快捷方式,因为快捷方式只要名字不同就可以存在多个,即使名字相同,只要备注不同,又可以存在多个. 那么由于软件自带生成快捷方式的功能,为了避免桌面出 ...
- JAVA8新特性随笔
Instant:瞬时实例 LocalDate:本地日期,不包含具体时间.例如:2014-01-14可以用来记录生日.纪念日.加盟日等. LocalTime:本地时间,不包含日期 LocalDateTi ...
- 轻松使用hsqldb小型数据库
1.在pom.xml中引入相关jar包 <!-- spring data jpa --> <dependency> <groupId>org.springframe ...
- 【Java并发】基础
一.概述 1.1 线程与进程区别 1.2 多线程引发的性能问题 二.多线程创建方式 2.1 第一种-继承Thread类 2.2 第二种-实现Runnable接口 2.3 第三种-实现Callable接 ...
- Oracle中函数关键字简介
常用的语法:select--from--where--group by--having--order by 1.分组子句group by +con 按什么分组 2.having子句 对上面分组的数据 ...
- 7.Bconsole操作
1. Bconsole操作 启动控制台 cd /usr/local/bacula/bin ./bconsole *help Command Description ======= ...