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验证邮箱格式并显示提交按钮
Nov 07 Javascript
简要了解jQuery移动web开发的响应式布局设计
Dec 04 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
js实现精确到毫秒的倒计时效果
Aug 05 Javascript
微信小程序 textarea 组件详解及简单实例
Jan 10 Javascript
Angular2 路由问题修复详解
Mar 01 Javascript
用jQuery实现圆点图片轮播效果
Mar 19 Javascript
5分钟打造简易高效的webpack常用配置
Jul 04 Javascript
angular2路由切换改变页面title的示例代码
Aug 23 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
Jan 17 Javascript
小程序文字跑马灯效果
Dec 28 Javascript
详解elementui之el-image-viewer(图片查看器)
Aug 30 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里的JS打印函数
2006/10/09 PHP
php调用mysql数据 dbclass类
2011/05/07 PHP
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
Angular ElementRef简介及其使用
2018/10/01 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
Python类的多重继承问题深入分析
2014/11/09 Python
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
Python实现字典依据value排序
2016/02/24 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
详解Django配置优化方法
2019/11/18 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
django ORM之values和annotate使用详解
2020/05/19 Python
python3跳出一个循环的实例操作
2020/08/18 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
百思买美国官网:Best Buy
2016/07/28 全球购物
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
致铅球运动员加油稿
2014/02/13 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
目标管理责任书
2014/04/15 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
公司表扬信格式
2015/05/04 职场文书
阳光体育运动标语口号
2015/12/26 职场文书