Ajax — cropper (图片剪裁)基本用法

jQuery-cropper插件完整的API:http://www.jq22.com/jquery-info9322

1. 基本使用步骤

  1. <head> 中导入 cropper.css 样式表:
<link rel="stylesheet" href="/assets/lib/cropper/cropper.css" />
  1. <body> 的结束标签之前,按顺序导入如下的 js 脚本:
<script src="/assets/lib/jquery.js"></script>
<script src="/assets/lib/cropper/Cropper.js"></script>
<script src="/assets/lib/cropper/jquery-cropper.js"></script>

3、在卡片的 layui-card-body 主体区域中,定义如下的 HTML 结构:

 <!-- 第一行的图片裁剪和预览区域 --><div class="row1"><!-- 图片裁剪区域 --><div class="cropper-box"><!-- 这个 img 标签很重要,将来会把它初始化为裁剪区域 --><img id="image" src="/assets/images/sample.jpg" /></div><!-- 图片的预览区域 --><div class="preview-box"><div><!-- 宽高为 100px 的预览区域 --><div class="img-preview w100"></div><p class="size">100 x 100</p></div><div><!-- 宽高为 50px 的预览区域 --><div class="img-preview w50"></div><p class="size">50 x 50</p></div></div></div><!-- 第二行的按钮区域 --><div class="row2"><button type="button" class="layui-btn">上传</button><button type="button" class="layui-btn layui-btn-danger">确定</button></div>

4、美化的样式:

/* 设置卡片主体区域的宽度 */
.layui-card-body {width: 500px;
}/* 设置按钮行的样式 */
.row2 {display: flex;justify-content: flex-end;margin-top: 20px;
}/* 设置裁剪区域的样式 */
.cropper-box {width: 350px;height: 350px;background-color: cyan;overflow: hidden;
}/* 设置第一个预览区域的样式 */
.w100 {width: 100px;height: 100px;background-color: gray;
}/* 设置第二个预览区域的样式 */
.w50 {width: 50px;height: 50px;background-color: gray;margin-top: 50px;
}/* 设置预览区域下方文本的样式 */
.size {font-size: 12px;color: gray;text-align: center;
}/* 设置图片行的样式 */
.row1 {display: flex;
}/* 设置 preview-box 区域的的样式 */
.preview-box {display: flex;flex-direction: column;flex: 1;align-items: center;
}/* 设置 img-preview 区域的样式 */
.img-preview {overflow: hidden;border-radius: 50%;
}

5、实现基本裁剪效果:

// 1.1 获取裁剪区域的 DOM 元素var $image = $('#image')// 1.2 配置选项const options = {// 纵横比aspectRatio: 1,// 指定预览区域preview: '.img-preview'}// 1.3 创建裁剪区域$image.cropper(options)

2. 更换裁剪的图片

  1. 拿到用户选择的文件
var file = e.target.files[0]

2、根据选择的文件,创建一个对应的 URL 地址:

var newImgURL = URL.createObjectURL(file)

3、先销毁旧的裁剪区域,再重新设置图片路径,之后再创建新的裁剪区域

$image.cropper('destroy')      // 销毁旧的裁剪区域.attr('src', newImgURL)  // 重新设置图片路径.cropper(options)        // 重新初始化裁剪区域

4、将裁剪后的图片,输出为 base64 格式的字符串

var dataURL = $image.cropper('getCroppedCanvas', { // 创建一个 Canvas 画布width: 100,height: 100}).toDataURL('image/png')       // 将 Canvas 画布上的内容,转化为 base64 格式的字符串

Canvas 技术,是浏览器网页中实现绘图的一门技术。它是由 <canvas> 标签和一套绘图 API 组成的!

   $('#sure').click(function(){let i = image.cropper('getCroppedCanvas', { // 创建一个 Canvas 画布width: 100,height: 100});//将图片转为base64var str = i.toDataURL();$.ajax({type:'POST',url:'/my/update/avatar',data :{avatar: str},success:function(res){layer.msg(res.message);if(res.status === 0){window.parent.getUserInfo();}}});});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「短篇小说」灵囚 540 天

转载&#xff1a;知乎 - BIMBOX 孙彬 - https://zhuanlan.zhihu.com/p/24655832 「我们总有一天会逾越那条上帝划好的界限&#xff0c;而最终我们将无法面对真实和虚假&#xff0c;正义与罪恶。」 「不幸的是&#xff0c;从伊甸园那一次&#xff0c;我们就已经越界了。」 第十天…

iOS 够逼格的注释总结

首先关于注意这里就不说什么VVDocument了&#xff0c;来点新鲜的&#xff01; 也许你使用过#warning 警告提示 也许你也使用过#pragma marks。 但是你见过或者使用过下面这个吗&#xff1f; Comments containing:MARK:TODO:FIXME:!!!:???: 没有&#xff0c;那么你就快速的看…

Git图形化管理工具

Git图形化管理工具 注意&#xff1a;必须在创建的仓库中进行右键打开 复制这段内容后打开百度网盘App&#xff0c;操作更方便哦。 链接&#xff1a;https://pan.baidu.com/s/1eXIk01LXSmzmXvYfw3MnEA 提取码&#xff1a;J166 --来自百度网盘超级会员V5的分享 分类 sourceTr…

TCP/IP(一):数据链路层

背景 这一系列的文章主要是为一般的、非专业开发岗位(如移动端)的工程师准备&#xff0c;一方面可以对网络的基本知识有基本的了解&#xff0c;另一方面不至于面试中被问到相关问题时束手无策。知识以 TCP/IP 协议簇为主&#xff0c;也会有应用层和数据链路层的简单介绍。 文…

富文本和封面制作

1. 富文本编辑器的实现步骤 添加如下的 layui 表单行&#xff1a; <div class"layui-form-item"><!-- 左侧的 label --><label class"layui-form-label">文章内容</label><!-- 为富文本编辑器外部的容器设置高度 --><div…

Linux系统编程——线程(1)

目录 线程概要Linux内核线程实现原理线程的共享/不共享资源线程优缺点线程控制原语pthread_selfpthread_createpthread_exitpthread_joinpthread_cancel终止线程方式控制原语对比前情提要&#xff1a; Linux用户级线程和内核级线程区别 线程概要 Linux内核线程实现原理 类Unix系…

TCP/IP(二):IP协议

IP协议处于OSI参考模型的第三层——网络层&#xff0c;网络层的主要作用是实现终端节点间的通信。IP协议是网络层的一个重要协议&#xff0c;网络层中还有ARP(获取MAC地址)和ICMP协议(数据发送异常通知) 数据链路层的作用在于实现同一种数据链路下的包传递&#xff0c;而网络层…

Ajax — 大事件项目(第四天)

分类管理 添加分类 初步使用弹出层 给 “添加分类” 绑定一个单击事件单击事件中&#xff0c;使用 layer.open() 实现一个弹出层 type: 1, 弹层的类型是页面层title, “添加文字分类”content: ‘字符串&#xff0c;DOM’,area: [‘500px’, ‘250px’] // ---------------…

redis学习(四)

一、Redis 键(key) 1、Redis 键命令用于管理 redis 的键。 2、Redis 键命令的基本语法如下&#xff1a;redis 127.0.0.1:6379> COMMAND KEY_NAME 3、常用key命令 keys * 获取所有的keyselect 0 选择第一个库move myString 1 将当前的数据库key移动到某个…

TCP/IP(三):IP协议相关技术

在前两篇文章中&#xff0c;我分别介绍了数据链路层和网络层的IP协议。虽然这个系列教程的重点是搞定 TCP/IP&#xff0c;不过不用着急&#xff0c;本文简要介绍完与 IP 协议相关的技术&#xff0c;下一篇文章就会正式、详细的介绍 传输层与 TCP 协议。这篇文章会介绍 DNS、ARP…

Node — 第一天

Node-01 会 JavaScript&#xff0c;就能学会 Node.js&#xff01;&#xff01;&#xff01; **Node.js 的官网地址&#xff1a; ** Node.js 的学习路径&#xff1a; JavaScript 基础语法 Node.js 内置 API 模块&#xff08;fs、path、http等&#xff09; 第三方 API 模块&…

TCP/IP(四):TCP 与 UDP 协议简介

从本章开始&#xff0c;我们开始介绍最重要的传输层。传输层位于 OSI 七层模型的第四层&#xff08;由下往上&#xff09;。顾名思义&#xff0c;传输层的主要作用是实现应用程序之间的通信。网络层主要是保证不同数据链路下数据的可达性&#xff0c;至于如何传输数据则是由传输…

Node — 第二天

http模块 搭建服务器的步骤 ① 导入 http 模块 ② 创建 web 服务器实例 ③ 为服务器实例绑定 request 事件&#xff0c;监听客户端的请求 ④ 启动服务器 // ① 导入 http 模块 const http require(http);// ② 创建 web 服务器实例 const server http.createServer();/…

《学习之道》第九章不要突击工作

灵感从天而降的时刻确实是存在的。 这样少见的创造性突破&#xff0c;通常是在经历了一番神经紧张的准备、竭尽全力的努力&#xff0c;甚至包括熬夜工作后才姗姗来迟。这与 数学 和 科学标准的一天学习 是大不相同的。 它更像体育运动&#xff1a;每隔一阵子会有一天的比赛&…

TCP/IP(五):TCP 协议详解

上一节 中讲过&#xff0c;TCP 协议是面向有连接的协议&#xff0c;它具有丢包重发和流量控制的功能&#xff0c;这是它区别于 UDP 协议最大的特点。本文就主要讨论这两个功能。 数据包重发 数据发送 丢包重发的前提是发送方能够知道接收方是否成功的接收了消息。所以&#…

nodeJS — 学习的笔记

Node介绍 为什么要学习Node.js 企业需求 具有服务端开发经验更改front-endback-end全栈开发工程师基本的网站开发能力 服务端前端运维部署 多人社区 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MVqHkEIo-1588084625862)(C:\Users\A\AppData\R…

TCP/IP(六):HTTP 与 HTTPS 简介

本文是准备面试过程中网络部分总结整理的最后一篇文章&#xff0c;主要介绍以下知识&#xff1a; HTTP 协议概述POST 请求和 GET 请求Cookie 和 Session数据传输时的加密HTTPS 简介 HTTP 协议 在 OSI 七层模型中&#xff0c;HTTP 协议位于最顶层的应用层中。通过浏览器访问网…

Node — 第三天

模块化 什么是模块化 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。 对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 生活中的模块化 编程中的模块化 编程领域中的模块化&#xff0c;就是遵守固定的规则&#xff0c;…

FireDAC 中文字段过滤问题

当使用 FireDAC Filter 过滤数据的时候&#xff0c;通常这样写&#xff1a; FDMemTable.Filtered : False; FDMemTable1.Filter : 姓名 string(edtFilter.Text).QuotedString; FDMemTable.Filtered : True; 将会报错&#xff1a;[FireDAC][Stan][Eval]-107. Invalid characte…

UIScrollViewDelegate-代理API详解

在iOS编程中&#xff0c;经常用到UIScrollView控件。自然也会用到UIScrollViewDelegate协议。 今天就抽空&#xff0c;研究了一下UIScrollViewDelegate中所有的委托方法。 仅做Mark&#xff01;如有&#xff0c;错误之处&#xff0c;欢迎留言指正&#xff0c;交流&#xff01;贴…