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中的Split使用方法与技巧
Mar 09 Javascript
jquery弹出框的用法示例(2)
Aug 26 Javascript
JS中判断null、undefined与NaN的方法
Mar 26 Javascript
javascript实现3D切换焦点图
Oct 16 Javascript
JQuery的Pager分页器实现代码
May 03 Javascript
AngularJS入门教程之双向绑定详解
Aug 18 Javascript
Three.js基础学习教程
Nov 16 Javascript
基于vue.js组件实现分页效果
Dec 29 Javascript
Java Varargs 可变参数用法详解
Jan 28 Javascript
jQuery实现简单飞机大战
Jul 05 jQuery
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
Mar 01 Vue.js
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 Vue.js
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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
php检测文件编码的方法示例
2014/04/25 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
PHP登录(ajax提交数据和后台校验)实例分享
2016/12/29 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
phpwind放自动注册方法
2006/12/02 Javascript
jQuery中element选择器用法实例
2014/12/29 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
写给小白看的JavaScript异步
2017/11/29 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
2017/12/11 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
python面试题小结附答案实例代码
2019/04/11 Python
tensorflow之并行读入数据详解
2020/02/05 Python
python with语句的原理与用法详解
2020/03/30 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
大学生学雷锋活动总结
2014/06/26 职场文书
学生犯错保证书
2015/05/09 职场文书
行政申诉状范文
2015/05/20 职场文书
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android