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 模拟雅虎首页的点击对话框效果
Apr 11 Javascript
基于JavaScript的操作系统你听说过吗?
Jan 28 Javascript
JS中多种方式创建对象详解
Mar 22 Javascript
微信小程序 PHP后端form表单提交实例详解
Jan 12 Javascript
利用vue.js插入dom节点的方法
Mar 15 Javascript
JavaScript中重名的函数与对象示例详析
Sep 28 Javascript
ES7中利用Await减少回调嵌套的方法详解
Nov 01 Javascript
基于react后端渲染模板引擎noox发布使用
Jan 11 Javascript
原生JS实现$.param() 函数的方法
Aug 10 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
Dec 24 Javascript
Vue项目服务器部署之子目录部署方法
May 12 Javascript
angular多语言配置详解
May 16 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 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
九种原生js动画效果
2015/11/11 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
python ElementTree 基本读操作示例
2009/04/09 Python
python实现代码行数统计示例分享
2014/02/10 Python
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
BONIA官方网站:国际奢侈品牌和皮革专家
2016/11/27 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
检察官就职演讲稿
2014/01/13 职场文书
给老师的感谢信
2015/01/20 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android
详解SQL报错盲注
2022/07/23 SQL Server