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 相关文章推荐
推荐 21 款优秀的高性能 Node.js 开发框架
Aug 18 Javascript
jQuery应用之jQuery链用法实例
Jan 19 Javascript
JavaScript中数据结构与算法(四):串(BF)
Jun 19 Javascript
基于JavaScript短信验证码如何实现
Jan 24 Javascript
js注入 黑客之路必备!
Sep 14 Javascript
vue.js学习之vue-cli定制脚手架详解
Jul 02 Javascript
使用JavaScript实现点击循环切换图片效果
Sep 03 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
Sep 14 Javascript
Koa日志中间件封装开发详解
Mar 09 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
Apr 30 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
Dec 31 Javascript
VUE 单页面使用 echart 窗口变化时的用法
Jul 30 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 REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
PHP 多进程 解决难题
2009/06/22 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
php图片添加水印例子
2016/07/20 PHP
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
老生常谈JavaScript中的this关键字
2016/10/01 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
Python3中exp()函数用法分析
2019/02/19 Python
python读写csv文件方法详细总结
2019/07/05 Python
Python求离散序列导数的示例
2019/07/10 Python
python 调试冷知识(小结)
2019/11/11 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
计算机应用专业推荐信
2013/11/13 职场文书
普师专业个人自荐信范文
2013/11/26 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
团购业务员岗位职责
2014/03/15 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
入党介绍人意见范文
2015/06/01 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
python 中的@运算符使用
2021/05/26 Python
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫