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 相关文章推荐
json跟xml的对比分析
Jun 10 Javascript
javascript十个最常用的自定义函数(中文版)
Sep 07 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
Dec 02 Javascript
Jquery判断IE6等浏览器的代码
Apr 05 Javascript
JS中Iframe之间传值的方法
Mar 11 Javascript
js定时调用方法成功后并停止调用示例
Apr 08 Javascript
javascirpt实现2个iframe之间传值的方法
Jun 30 Javascript
jquery实现拖动效果
Aug 10 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
Aug 30 Javascript
vue组件之Alert的实现代码
Oct 17 Javascript
vue.js  父向子组件传参的实例代码
Oct 29 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
Feb 18 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
python练习程序批量修改文件名
2014/01/16 Python
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
美国宠物商店:Wag.com
2016/10/25 全球购物
十八届三中全会学习方案
2014/02/16 职场文书
社区娱乐活动方案
2014/08/21 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
项目安全员岗位职责
2015/02/15 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
2016年国培研修日志
2015/11/13 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
某某店铺的开业庆典主持词范本
2019/11/25 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby