jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一


Posted in jQuery onMay 26, 2017

上一节随笔中,我们已经知道了关于jQuery插件ImgAreaSelect基本的知识;那么现在看一下实例:

首先,要知道我们应该实现什么功能?

(1)图片能够实现上传预览功能

(2)拖拽裁剪图片,使其能够显示裁剪后的区域

(3)显示要裁剪区域的坐标

其次,该如何引用该插件呢?

   那就具体看一下吧!

第一步:先将样式和文件包引入(根据你自己的位置引入)

<!--引入imgareaselect的css样式-->
<link rel="stylesheet" type="text/css" href="../jquery.imgareaselect-0.9.10/css/imgareaselect-default.css" rel="external nofollow" rel="external nofollow" />
<!--引入jquery包-->
<script type="text/javascript" src="../jquery-1.11.2.min.js"></script>
<!--引入imgareaselect的js文件-->
<script type="text/javascript" src="../jquery.imgareaselect-0.9.10/scripts/jquery.imgareaselect.pack.js"></script>

第二步:先用div布局样式,如下图所示

<body>
 <div style="float:left; width:300px;">
 <p>亲,请上传图片并裁剪</p>
 <div style="width:300px; height:300px;float: left;">
  <!--原图-->  
  <img id="uploadPreview"/>
  <input id="uploadImage" type="file" name="photoimage" class="fimg1" onchange="PreviewImage();" /> <!--//对这个按钮加一个事件-->
 </div>
 </div>  
 <div style="float:left; width:300px;">
 <p style="font-size:110%; font-weight:bold; padding-left:0.1em;">
 选区预览
 </p>
 <div style="margin:0 1em; width:100px; height:100px;border: 1px solid black;">
  <div id="preview" style="width:100px; height:100px; overflow:hidden;">
  <!--裁剪后的图片-->
  <img id="tp" style="width:200px; height:200px;">
  </div>
 </div> 
 <!--做一个表格用来放选取图片的坐标-->
 <table style="margin-top:1em;">
  <thead>
  <tr>
  <th colspan="2" style="font-size:110%; font-weight:bold; text-align:left; padding-left: 0.1em;"> 坐标</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td style="width:10%;"><b>X<sub>1</sub>:</b></td>
  <td style="width:30%;"><input type="text" id="x1" value="-" /></td>
  </tr>
  <tr>
  <td><b>Y<sub>1</sub>:</b></td>
  <td><input type="text" id="y1" value="-" /></td>
  </tr>
  <tr>  
  <td><b>X<sub>2</sub>:</b></td>
  <td><input type="text" id="x2" value="-" /></td>
  </tr>
  <tr>
  <td><b>Y<sub>2</sub>:</b></td>
  <td><input type="text" id="y2" value="-" /></td>
  </tr>  
  </tbody>
 </table> 
 </div>
 </div> 
 </body>

jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一

css样式:

<style>
 #uploadPreview
 {
 width: 170px;
 height: 170px;   
 background-position: center center;
 background-size: cover;
 border: 1px solid brown;
 -webkit-box-shadow: 0 0 0px 0px rgba(0, 0, 0, 0);
 display: inline-block;
 }
 </style>

第三步:实现图片的上传预览效果

思路:通过input 将图片的 src传给第一个img,然后再将第一个img的src传给第二个img的src

<script> 
//通过input将图片路径传给第一个img
$("#uploadImage").on("change", function(){
 // 得到一个参考文件列表
 var files = !!this.files ? this.files : []; 
 // 如果没有选择任何文件,或者没有文件读到就返回
 if (!files.length || !window.FileReader) return;
 // 只有进行选择的文件是一个形象
 if (/^image/.test( files[0].type)){
 // 创建一个新的FileReader的实例
 var reader = new FileReader(); 
 // 读取本地文件作为一个DataURL
 reader.readAsDataURL(files[0]);
 // 当加载时,图像数据设置为背景的div
 reader.onloadend = function(){
  //给第一个img添加路径 
 $("#uploadPreview").attr("src",this.result);
  //给第二个img添加路径 
  $("#tp").attr("src",this.result);
  //开启裁剪功能  
 $('#uploadPreview ').imgAreaSelect( {handles:true, fadeSpeed:200, onSelectEnd : preview});
 }
 }
});
</script>

这样,就能够实现如下效果:

点击浏览

jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一

点击选择 :

jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一

第四步:实现区域选择功能

<script>
 function preview(img, selection)
 {
 if(!selection.width || !selection.height) //判断选取区域不为空
  return; 
  //分别取高宽比率 
 var scaleX = 100 / selection.width; 
 var scaleY = 100 / selection.height;  
 var img = new Image();
 //传路径
 img.src = document.getElementById('uploadPreview').src; 
 //给裁剪的图片定义高和宽
 $('#preview img').css( {
  width : Math.round(scaleX * 170), //170为第一个img的宽,不然截取的图片会有所缺失,可以自己试试 
  height: Math.round(scaleY * 170), //170为第一个img的高
  marginLeft: -Math.round(scaleX * selection.x1),
  marginTop: -Math.round(scaleY * selection.y1)
 }); 
 //显示坐标 
 $('#x1').val(selection.x1);
 $('#y1').val(selection.y1);
 $('#x2').val(selection.x2);
 $('#y2').val(selection.y2); 
 }
 </script>

这样就可以实现如下效果啦~~~

jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一

到这一步就可以实现头像的上传以及裁剪功能了,当然后期还要将路径添加到数据库就更完美了~~~~

 (------------------------------------------------------------------------此处应有分割线----------------------------------------------------------------------)

如果你只想实现简单的图片裁剪功能,那么可以看看下面代码,此处不做注释了~~~

当然,如果上边的代码看不太明白,也可以参照下面的这个进行修改,将图片上传预览功能添加上即可哈~~~~

效果图:(对比图片就可以知道,下面这个就只是少了浏览功能,其他完全一样)

jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title></title>
  <!--在HTML头部加入:-->
 <link rel="stylesheet" type="text/css" href="../jquery.imgareaselect-0.9.10/css/imgareaselect-default.css" rel="external nofollow" rel="external nofollow" />
 <script type="text/javascript" src="../jquery-1.11.2.min.js"></script>
 <script type="text/javascript" src="../jquery.imgareaselect-0.9.10/scripts/jquery.imgareaselect.pack.js"></script>
 <script type="text/javascript">
 $(document).ready(function() {
 $('#photo').imgAreaSelect( {handles:true, fadeSpeed:200, onSelectEnd : preview});
 });
// 如果加上aspectRatio: '1:1',$('#photo').imgAreaSelect( {aspectRatio: '1:1',handles:true, fadeSpeed:200, onSelectEnd : preview});则选取区域固定为正方形。
 function preview(img, selection)
 {
 //等同于var scaleX = 100 / (selection.width || 1) 
 //先对||前面的进行布尔运算,如果结果是true(即width存在且不是0),就使用width,否则使用||后的变量1
 //也就是先检查 selection.width 有没有值,有的话就用 100 / 该值再付给 scaleX,没的话就用 100 / 1 来赋值;
 if(!selection.width || !selection.height)
  return; 
 var scaleX = 100 / selection.width;
 var scaleY = 100 / selection.height; 
 //设置裁剪后图片的宽高 
 $('#preview img').css( {
  width : Math.round(scaleX * 200),
  height: Math.round(scaleY * 200),
  marginLeft: -Math.round(scaleX * selection.x1),
  marginTop: -Math.round(scaleY * selection.y1)
 }); 
 $('#x1').val(selection.x1);
 $('#y1').val(selection.y1);
 $('#x2').val(selection.x2);
 $('#y2').val(selection.y2);
 $('w').val(selection.width);
 $('h').val(selection.height);
 }
 </script>
 </head>
 <body>
 <div>
 <!--选取的图片-->
 <div style="float:left; width:70%;">
 <p>
 Click and drag on the image to select an area.
 </p>
 <div style="margin:0 0.3em; width:200px; height:200px;">
  <img id="photo" src="./images/1.jpg" style="width:200px; height:200px;"/>
 </div>
 </div> 
 <!--截取的图片-->
 <div style="float:left; width:30%;">
 <p style="font-size:110%; font-weight:bold; padding-left:0.1em;">
 Selection Preview
 </p>
 <div style="margin:0 1em; width:100px; height:100px;">
  <div id="preview" style="width:100px; height:100px; overflow:hidden;">
  <img src="./images/1.jpg" style="width:200px; height:200px;">
  </div>  
 </div> 
 <table style="margin-top:1em;">
  <thead>
  <tr>
  <th colspan="2" style="font-size:110%; font-weight:bold; text-align:left; padding-left: 0.1em;"> Coordinates</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td style="width:10%;"><b>X<sub>1</sub>:</b></td>
  <td style="width:30%;"><input type="text" id="x1" value="-" /></td>
  </tr>
  <tr>
  <td><b>Y<sub>1</sub>:</b></td>
  <td><input type="text" id="y1" value="-" /></td>
  </tr>
  <tr>
  <td><b>X<sub>2</sub>:</b></td>
  <td><input type="text" id="x2" value="-" /></td>
  </tr>
  <tr>
  <td><b>Y<sub>2</sub>:</b></td>
  <td><input type="text" id="y2" value="-" /></td>
  </tr>  
  </tbody>
 </table> 
 </div>
 </div>
 </body>
</html>

以上所述是小编给大家介绍的jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

jQuery 相关文章推荐
jQuery遍历节点方法汇总(推荐)
May 13 jQuery
jQuery实现可拖动进度条实例代码
Jun 21 jQuery
jquery+css实现简单的图片轮播效果
Aug 07 jQuery
jQuery 实时保存页面动态添加的数据的示例
Aug 14 jQuery
jQuery实现注册会员时密码强度提示信息功能示例
Sep 05 jQuery
jQuery中 DOM节点操作方法大全
Oct 12 jQuery
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 jQuery
jQuery实现仿京东防抖动菜单效果示例
Jul 06 jQuery
jQuery实现的点击按钮改变样式功能示例
Jul 21 jQuery
jquery获取元素到屏幕四周可视距离的方法
Sep 05 jQuery
jquery实现Ajax请求的几种常见方式总结
May 28 jQuery
javascript异步处理与Jquery deferred对象用法总结
Jun 04 jQuery
jQuery导航条固定定位效果实例代码
May 26 #jQuery
bootstrap+jQuery实现的动态进度条功能示例
May 25 #jQuery
jQuery滚动插件scrollable.js用法分析
May 25 #jQuery
jQuery Masonry瀑布流布局神器使用详解
May 25 #jQuery
jQuery模拟实现天猫购物车动画效果实例代码
May 25 #jQuery
jquery.masonry瀑布流效果
May 25 #jQuery
浅谈struts1 &amp; jquery form 文件异步上传
May 25 #jQuery
You might like
php报表之jpgraph柱状图实例代码
2011/08/22 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
Python subprocess模块学习总结
2014/03/13 Python
Python进阶篇之字典操作总结
2016/11/16 Python
Python正则表达式使用范例分享
2016/12/04 Python
Python实现的字典值比较功能示例
2018/01/08 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
小学生寒假家长评语
2014/04/16 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
公司合作协议范文
2014/10/01 职场文书
未婚证明书模板
2014/10/08 职场文书
白酒代理协议书范本
2014/10/26 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书