Angular实现图片裁剪工具ngImgCrop实践


Posted in Javascript onAugust 17, 2017

ngImgCrop是AngularJS的一个图片裁剪插件,它实际上是一个封装好的AngularJs指令,可以让用户以圆框或者方框来裁剪图片

1、使用效果截图

Angular实现图片裁剪工具ngImgCrop实践   Angular实现图片裁剪工具ngImgCrop实践

2、demo演示

demo演示地址 http://jsfiddle.net/alexk111/rw6q9/

3、下载安装

可以使用两种方式来下载ngImgCrop插件

a、GitHub下载:git clone https://github.com/alexk111/ngImgCrop.git

b、bower安装,如果项目中使用了bower,使用命令bower install ngImgCrop即可

4、添加js和css依赖到项目中

<script src="angular.js"></script>
<script src="ng-img-crop.js"></script>
<link rel="stylesheet" type="text/css" href="ng-img-crop.css" rel="external nofollow" rel="external nofollow" >

5、添加AngularJs依赖

var myAppModule = angular.module('MyApp', ['ngImgCrop']);

6、使用样例

<html>
<head>
 <script src="angular.js"></script>
 <script src="ng-img-crop.js"></script>
 <link rel="stylesheet" type="text/css" href="ng-img-crop.css" rel="external nofollow" rel="external nofollow" >
 <style>
  .cropArea {
   background: #E4E4E4;
   overflow: hidden;
   width:500px;
   height:350px;
  }
 </style>
 <script>
  angular.module('app', ['ngImgCrop'])
   .controller('Ctrl', function($scope) {
    $scope.myImage='';
    $scope.myCroppedImage='';

    var handleFileSelect=function(evt) {
     var file=evt.currentTarget.files[0];
     var reader = new FileReader();
     reader.onload = function (evt) {
      $scope.$apply(function($scope){
       $scope.myImage=evt.target.result;
      });
     };
     reader.readAsDataURL(file);
    };
    angular.element(document.querySelector('#fileInput')).on('change',handleFileSelect);
   });
 </script>
</head>
<body ng-app="app" ng-controller="Ctrl">
 <div>Select an image file: <input type="file" id="fileInput" /></div>
 <div class="cropArea">
  <img-crop image="myImage" result-image="myCroppedImage"></img-crop>
 </div>
 <div>Cropped Image:</div>
 <div><img ng-src="{{myCroppedImage}}" /></div>
</body>
</html>

7、属性介绍

<img-crop
  image="{string}"  需要进行裁剪的图片文件  如$scope.myImage
  result-image="{string}"保存裁剪结果的图片文件
如$scope.myCroppedImage
  [change-on-fly="{boolean}"]
 可选项:表示是否在拖拽裁剪区域时实时更新结果文件
  [area-type="{circle|square}"]
可选项:表示裁剪窗口是方的还是圆的,默认是圆的
  [area-min-size="{number}"]

可选项,表示裁剪结果的最小大小,默认是80,即结果最小是高80像素、宽80像素
  [result-image-size="{number}"]
可选项,表示裁剪结果大小,默认是200,即高200像素、宽200像素
  [result-image-format="{string}"]
可选项,表示裁剪结果保存的文件类型,可以选择image/jpeg、image/png、image/webp,默认是image/png
  [result-image-quality="{number}"]
可选项,表示裁剪结果的质量,取值在0.0到1.0之间
  [on-change="{expression}"]


可选项,检测到图片修改后执行的表达式

  [on-load-begin="{expression"]

可选项,图片开始加载执行的表达式
  [on-load-done="{expression"]

可选项,图片加载完成执行的表达式
  [on-load-error="{expression"]

可选项,图片加载失败执行的表达式
></img-crop>

8、注意点

结果文件是base64的格式,如果是直接展示的话没有问题,如果是以文件格式要将图片上传给后台服务器,那么还需要将base64转换成图片文件格式,附上我自己的转换代码

$scope.file可直接作为File文件格式上传至后台服务器

function getBlobBydataURL(dataURI,type){
      var binary = atob(dataURI.split(',')[1]);
      var array = [];
      for(var i = 0; i < binary.length; i++) {
        array.push(binary.charCodeAt(i));
      }
      return new Blob([new Uint8Array(array)], {type:type });
    }

    var $Blob = getBlobBydataURL($scope.myCroppedImage,"image/png");
    $scope.file = $Blob;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
弹出广告特效(一个IP只弹出一次)的代码
Jul 27 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
May 05 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
Nov 23 Javascript
Mac下使用charles遇到的问题以及解决办法
Jan 10 Javascript
使用原生js写ajax实例(推荐)
May 31 Javascript
jQuery 表单序列化实例代码
Jun 11 jQuery
JS运动特效之任意值添加运动的方法分析
Jan 24 Javascript
Node.js应用设置安全的沙箱环境
Apr 23 Javascript
Node.js 使用jade模板引擎的示例
May 11 Javascript
jQuery实现点击图标div循环放大缩小功能
Sep 30 jQuery
谈谈JavaScript令人迷惑的==与+
Aug 31 Javascript
JavaScript高级程序设计之基本引用类型
Nov 17 Javascript
jQuery Layer弹出层传值到父页面的实现代码
Aug 17 #jQuery
jQuery条件分页 代替离线查询(附代码)
Aug 17 #jQuery
vue中appear的用法
Aug 17 #Javascript
Angularjs单选框相关的示例代码
Aug 17 #Javascript
js实现简易聊天对话框
Aug 17 #Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
Aug 17 #Javascript
javascript 日期相减-在线教程(附代码)
Aug 17 #Javascript
You might like
php仿QQ验证码的实例分析
2013/07/01 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
vue - props 声明数组和对象操作
2020/07/30 Javascript
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
python中对_init_的理解及实例解析
2019/10/11 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
介绍下Lucene建立索引的过程
2016/03/02 面试题
大三自我鉴定范文
2013/10/05 职场文书
物业保安主管岗位职责
2013/12/25 职场文书
大学军训感言800字
2014/02/27 职场文书
党员公开承诺书内容
2014/05/20 职场文书
建筑工地标语
2014/06/18 职场文书
中文专业求职信
2014/06/20 职场文书
心灵点滴观后感
2015/06/02 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
装修安全责任协议书
2016/03/22 职场文书
详解NodeJS模块化
2021/06/15 NodeJs
解决Oracle数据库用户密码过期
2022/05/11 Oracle