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 相关文章推荐
javascript动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
May 24 Javascript
简介JavaScript中的push()方法的使用
Jun 09 Javascript
JavaScript访问字符串中单个字符的两种方法
Jul 03 Javascript
常见的javascript跨域通信方法
Dec 31 Javascript
完美实现八种js焦点轮播图(上篇)
Jul 18 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
Apr 05 Javascript
关于预加载InstantClick的问题解决方法
Sep 12 Javascript
微信小程序实现发红包功能
Jul 11 Javascript
jquery登录的异步验证操作示例
May 09 jQuery
jQuery实现飞机大战小游戏
Jul 05 jQuery
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
Nov 18 Vue.js
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和ACCESS写聊天室(十)
2006/10/09 PHP
php中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
php微信开发之关注事件
2018/06/14 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
python 集合 并集、交集 Series list set 转换的实例
2018/05/29 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
Python接口测试get请求过程详解
2020/02/28 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
中专毕业自我鉴定
2013/10/16 职场文书
仓库主管的岗位职责
2013/12/04 职场文书
国家励志奖学金获奖感言
2014/01/09 职场文书
事业单位请假制度
2014/01/13 职场文书
护理专业自荐信范文
2014/02/26 职场文书
幼儿评语大全
2014/04/30 职场文书
品牌转让协议书
2014/08/20 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
python中 .npy文件的读写操作实例
2022/04/14 Python