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 相关文章推荐
JS维吉尼亚密码算法实现代码
Nov 09 Javascript
文本框根据输入内容自适应高度的代码
Oct 24 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
Mar 15 Javascript
JQuery插件Style定制化方法的分析与比较
May 03 Javascript
运算符&amp;&amp;的三个不同层次
Apr 07 Javascript
jQuery判断密码强度实现思路及代码
Apr 24 Javascript
javascript获取url上某个参数的方法
Nov 08 Javascript
初步使用Node连接Mysql数据库
Mar 03 Javascript
leaflet的开发入门教程
Nov 17 Javascript
axios学习教程全攻略
Mar 26 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
Oct 06 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
Nov 05 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 empty函数 使用说明
2009/08/10 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
PHP常用的小程序代码段
2015/11/14 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
vue之浏览器存储方法封装实例
2018/03/15 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
python实现2048小游戏
2015/03/30 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
简单了解django缓存方式及配置
2019/07/19 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
Python requests上传文件实现步骤
2020/09/15 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
你懂得怎么写自荐信吗?
2013/12/27 职场文书
保险内勤岗位职责
2014/04/05 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
护士自我推荐信范文
2015/03/24 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
物资采购管理制度
2015/08/06 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
党章学习心得体会2016
2016/01/14 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
详解JAVA的控制语句
2021/11/11 Java/Android
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android