jQuery实现图片上传和裁剪插件Croppie


Posted in Javascript onNovember 29, 2015

在很多应用需要上传本地图片然后再按尺寸适当裁剪以符合网站对图片尺寸的要求。最常见的就是各用户系统要求用户上传和裁剪头像的应用。今天我给大家介绍的是一款基于HTML5和jQuery的图片上传和裁剪插件,它叫Croppie。

运行效果图:

jQuery实现图片上传和裁剪插件Croppie

HTML
首先我们将相关js和css文件载入head中。

<script src="jquery.min.js"></script> 
<script src="croppie.min.js"></script> 
<link rel="stylesheet" href="croppie.css">

接下来我们在页面上放置一个图片上传按钮,我们可以用css将type="file"的文件选择控件转成按钮样式。选择完图片后,在#upload-demo展示上传图片,以及调用裁剪插件Croppie。#result用来展示裁剪后的图片。

<div class="actions"> 
 <button class="file-btn"> 
  <span>上传</span> 
  <input type="file" id="upload" value="选择图片文件" /> 
 </button> 
 <div class="crop"> 
  <div id="upload-demo"></div> 
  <button class="upload-result">裁剪</button> 
 </div> 
 <div id="result"></div> 
</div>

CSS
使用以下CSS代码,我们很完美的将选择文件的控件转成按钮的样式,其实就是将type="file"透明度设成0,然后和button重叠。此外,我们先将图片裁剪区域.crop设置为不可见,等选择文件后再显示。

button, 
a.btn { 
 background-color: #189094; 
 color: white; 
 padding: 10px 15px; 
 border-radius: 3px; 
 border: 1px solid rgba(255, 255, 255, 0.5); 
 font-size: 16px; 
 cursor: pointer; 
 text-decoration: none; 
 text-shadow: none; 
} 
button:focus { 
 outline: 0; 
} 
 
.file-btn { 
 position: relative; 
} 
.file-btn input[type="file"] { 
 position: absolute; 
 top: 0; 
 left: 0; 
 width: 100%; 
 height: 100%; 
 opacity: 0; 
} 
 
.actions { 
 padding: 5px 0; 
} 
.actions button { 
 margin-right: 5px; 
} 
.crop{display:none}

jQuery
首先利用HTML5的FileReader API读取本地文件,然后$('#upload-demo').croppie()调用了Croppie插件。Croppie的选项viewport:可以设置所裁剪图片的宽度和高度,以及类型(圆形或方形);选项boundary是图片的外围尺寸。它还有参数mouseWheelZoom:是否支持鼠标滚轮缩放图像;showZoom:是否展示缩放条工具;update:回调函数。

$(function(){ 
 var $uploadCrop; 
 
  function readFile(input) { 
    if (input.files && input.files[0]) { 
    var reader = new FileReader(); 
     
    reader.onload = function (e) { 
     $uploadCrop.croppie('bind', { 
      url: e.target.result 
     }); 
    } 
     
    reader.readAsDataURL(input.files[0]); 
   } 
   else { 
    alert("Sorry - you're browser doesn't support the FileReader API"); 
   } 
  } 
 
  $uploadCrop = $('#upload-demo').croppie({ 
   viewport: { 
    width: 200, 
    height: 200, 
    type: 'circle' 
   }, 
   boundary: { 
    width: 300, 
    height: 300 
   } 
  }); 
 
  $('#upload').on('change', function () { 
   $(".crop").show(); 
   readFile(this); 
  }); 
  $('.upload-result').on('click', function (ev) { 
   $uploadCrop.croppie('result', 'canvas').then(function (resp) { 
    popupResult({ 
     src: resp 
    }); 
   }); 
  }); 
   
 function popupResult(result) { 
  var html; 
  if (result.html) { 
   html = result.html; 
  } 
  if (result.src) { 
   html = '<img src="' + result.src + '" />'; 
  } 
  $("#result").html(html); 
 } 
});

当点击“裁剪”按钮后,再次调用Croppie的result的方法,返回一张裁剪后的图片,并显示在#result中。

更多精彩内容请参考专题《ajax上传技术汇总》,《javascript文件上传操作汇总》和《jQuery上传操作汇总》进行学习。

以上就是jQuery实现图片上传和裁剪的主要过程,希望对大家学习图片上传和裁剪技术有所帮助。

Javascript 相关文章推荐
jQuery 源代码显示控件 (Ajax加载方式).
May 18 Javascript
Javascript中的this绑定介绍
Sep 22 Javascript
javascript通过navigator.userAgent识别各种浏览器
Oct 25 Javascript
jquery 动态合并单元格的实现方法
Aug 26 Javascript
深入理解jQuery()方法的构建原理
Dec 05 Javascript
JS中parseInt()和map()用法分析
Dec 16 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
Feb 13 Javascript
vue监听滚动事件实现滚动监听
Apr 11 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
Sep 07 Javascript
深入理解Vue.js轻量高效的前端组件化方案
Dec 10 Javascript
JavaScript递归函数定义与用法实例分析
Jan 24 Javascript
解决Vue中使用keepAlive不缓存问题
Aug 04 Javascript
javascript高级编程之函数表达式 递归和闭包函数
Nov 29 #Javascript
javascript实现拖动元素交换位置
Nov 29 #Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
Nov 29 #Javascript
通用javascript代码判断版本号是否在版本范围之间
Nov 29 #Javascript
jQuery如何使用自动触发事件trigger
Nov 29 #Javascript
js性能优化技巧
Nov 29 #Javascript
javascript实现C语言经典程序题
Nov 29 #Javascript
You might like
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Django框架中方法的访问和查找
2015/07/15 Python
利用Python破解验证码实例详解
2016/12/08 Python
Python探索之pLSA实现代码
2017/10/25 Python
Python使用wxPython实现计算器
2018/01/30 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
Django  ORM 练习题及答案
2019/07/19 Python
简单介绍python封装的基本知识
2019/08/10 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
详解Python 循环嵌套
2020/07/09 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
Python 实现集合Set的示例
2020/12/21 Python
玩具反斗城西班牙网上商城:ToysRUs西班牙
2017/01/19 全球购物
猫咪家具:CatsPlay
2018/11/03 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
考试诚信承诺书
2014/05/23 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
2014公司年终工作总结
2014/12/19 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
研究生导师推荐信
2015/03/25 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
nginx配置虚拟主机的详细步骤
2021/07/21 Servers