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 相关文章推荐
javascript Array数组对象的扩展函数代码
May 22 Javascript
jquery.validate使用攻略 第二部
Jul 01 Javascript
JavaScript中的this实例分析
Apr 28 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
Sep 22 Javascript
checkbox全选所涉及到的知识点介绍
Dec 31 Javascript
JavaScript动态生成二维码图片
Apr 20 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
Sep 13 Javascript
基于滚动条位置判断的简单实例
Dec 14 Javascript
Moment.js实现多个同时倒计时
Aug 26 Javascript
ligerUI的ligerDialog关闭刷新的方法
Sep 27 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
Apr 22 Javascript
Jquery $.map使用方法实例详解
Sep 01 jQuery
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
基于Zend的Captcha机制的应用
2013/05/02 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
2019/04/02 PHP
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
node.js中的events.emitter.once方法使用说明
2014/12/10 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
微信小程序template模版的使用方法
2019/04/13 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
python使用str &amp; repr转换字符串
2016/10/13 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
python解析含有重复key的json方法
2019/01/22 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
解决Python3下map函数的显示问题
2019/12/04 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
物业管理求职自荐信
2013/09/25 职场文书
主婚人致辞精选
2015/07/28 职场文书
校运会班级霸气口号
2015/12/24 职场文书
外出听课学习心得体会
2016/01/15 职场文书
 Python 中 logging 模块使用详情
2022/03/03 Python