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 判断页面元素是否存在的代码
Aug 14 Javascript
JS的反射问题
Apr 07 Javascript
用JavaScript对JSON进行模式匹配(Part 1-设计)
Jul 17 Javascript
JavaScript实现把数字转换成中文
Jun 29 Javascript
JavaScript的设计模式经典之代理模式
Feb 24 Javascript
使用 bootstrap modal遇到的问题小结
Nov 09 Javascript
JS实现图片放大镜插件详解
Nov 06 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
微信小程序 腾讯地图显示偏差问题解决
Jul 27 Javascript
Vue-router 报错NavigationDuplicated的解决方法
Mar 31 Javascript
详解Nuxt内导航栏的两种实现方式
Apr 16 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
Aug 06 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批量删除数据
2007/01/18 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
php实现头像上传预览功能
2017/04/27 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
一个基于jquery的文本框记数器
2012/09/19 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
全面了解js中的script标签
2016/07/04 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
python使用插值法画出平滑曲线
2018/12/15 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
编写strcpy函数
2014/06/24 面试题
C# .NET面试题
2015/11/28 面试题
财务管理专业自荐信范文
2013/12/24 职场文书
宿舍违规检讨书
2014/01/12 职场文书
活动倡议书范文
2014/05/13 职场文书
企业年度评优方案
2014/06/02 职场文书
小组口号大全
2014/06/09 职场文书
2014年卫生工作总结
2014/11/27 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL