cropbox.js

一个轻量级和简单的JavaScript,Jquery,YUI插件来裁剪您的头像。

特征

  • 支持dataUrl显示图像(函数getDataURL)
  • 支持Blob上传图片(函数getBlob)

主流的前端jQuery 图像裁剪插件有JcropCropBox,前者是将原图和需要裁剪的参数(裁剪的各点坐标,旋转角度等)传到后台,然后由后台完成实际的裁剪和后续操作。 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 头像裁剪插件的更多相关文章

  1. 基于jQuery头像裁剪插件cropbox

    今天给大家分享一款基于jQuery头像裁剪插件cropbox,这是一款简单实用的jQuery头像在线裁剪插件.该插件适用于适用浏览器:IE8.360.FireFox.Chrome.Safari.Ope ...

  2. 如何用CropBox实现头像裁剪并与java后台交互

    如何用CropBox实现头像裁剪并与java后台交互 参考网站:https://developer.mozilla.org/zh-CN/docs/Web/API/Blob 参考: http://blo ...

  3. 开源JS图片裁剪插件

    开源JS图片裁剪插件 一.总结 一句话总结: 要用点赞最高的插件,这样适用性最好,效果最好,出问题的概率也最低,这里电脑端和手机端都可以用的建议用 cropper.js 二.5款好用的开源JS图片裁剪 ...

  4. jQuery实现用户头像裁剪插件cropbox.js

    几乎每一个网页是必备图片上传,图片裁剪功能,这里通过cropbox.js插件实现该功能. <script src="js/jquery-1.11.1.min.js">& ...

  5. 第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传

    第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传 实现原理 前台用cropper插件,将用户上传头像时裁剪图片的坐标和图片,传到逻辑处理 ...

  6. cropbox插件实现的头像裁剪效果

    html代码 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...

  7. 【jQuery插件】使用cropper实现简单的头像裁剪并上传

    插件介绍 这是一个我在写以前的项目的途中发现的一个国人写的jQuery图像裁剪插件,当时想实现用户资料的头像上传功能,并且能够预览图片,和对图片进行简单的裁剪.旋转,花了不少时间才看到了这个插件,感觉 ...

  8. 用JQuery仿造QQ头像裁剪功能

    最近工作真心忙碌,几乎没时间写博客.今天趁周末来仿一个QQ头像裁剪功能插件.效果如下: 所有文件都可在我的Github上下载,从头到尾从简到繁按步骤一共分了9个HTML文件,每个步骤文件里的注释都写的 ...

  9. jfinal头像裁剪上传服务器

    前端页面完整代码,复制可用,记得导入库文件 <!DOCTYPE html> <html lang="en"> <head> <title& ...

随机推荐

  1. Python学习2——使用字符串(完整版)

    """ 在C语言入门的时候字符串没有好好学习,导致后期语言根本没有入门, 更导致之后大量的codeing时间浪费,效率低下. 因此,借助这次Python入门,好好地将字符 ...

  2. LeetCode 2——两数相加(JAVA)

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  3. 怎样监听xhr.readyState值的变化

    可以使用 xhr.onreadystatechange 属性指向的函数去监听 xhr.readyState 值的变化. 示例如下: var xhr = new XMLHttpRequest(); xh ...

  4. ADO.NET连接数据库增删查改创建公用类

    顺序如下:再web.config中添加数据库的用户名和密码 创建公用类. //添加进web.config中的账号和密码 /*<connectionStrings> <add name ...

  5. .NET Core 创建Windows服务

    .NET Core 创建Windows服务 作者:高堂 原文地址:https://www.cnblogs.com/gaotang/p/10850564.html 写在前面 使用 TopShelf+Au ...

  6. SIP 3pcc

    3PCC全称Third Party Call Control,中文即第三方电话呼叫控制,指的是由第三方控制者在另外两者之间建立一个会话,由控制者负责会话双方的媒体协商.3PCC是一种非常灵活的会话控制 ...

  7. STM32工程模版

    STM32工程模版,看过来 ST库源码去官方下载 创建工程目录 doc:存放说明文档 lib:存放库文件 listing:存放编译产生的中间文件 output:存放生成的文件 project:存放工程 ...

  8. 【python+beautifulsoup4】Python中安装bs4后,pycharm报错ModuleNotFoundError: No module named 'bs4'

    本文主要分享关于在对应python版本中安装beautifulsoup之后,在代码执行时还会提示“No module named 'bs4'”的问题. 安装beautifsoup4 在命令窗口执行 p ...

  9. 学习记录--JVM内存分析

    今天刷牛客网的题时,看到了两位大神关于JVM内存分析的讲解,就顺手记录学习一下. JVM内存模型图 方法区域存放了所加载的类的信息(名称.修饰符等).类中的静态变量.类中定义为final类型的常量.类 ...

  10. 命令行工具--LLDP

    目录 命令行工具--LLDP 一.场景引入 二.什么是LLDP? 三.在CentOS上安装LLDP 四.命令详解 五.脚本 命令行工具--LLDP 一.场景引入 有的时候,我们需要知道服务器上联交换机 ...