angularjs剪裁工具 imgeCropper


http://elemefe.github.io/image-cropper/

介紹

Image Cropper可以為圖片顯示一個裁剪框,裁剪框允許用戶調整大小和位置,常用來做用戶自定義頭像的裁剪功能。

目前Image Cropper的實現是無依賴的,瀏覽器支持到IE8+。Image Cropper可以和Angular一塊使用,也可以獨立使用。

安裝

如果你使用bower,可以在bower.json中添加這么一段配置:

"image-cropper": "git@github.com:ElemeFE/image-cropper.git#~0.3.0"

如果你使用npm,可以直接這么安裝:

npm install image-cropper.js --save

引入文件

Image Cropper的使用依賴兩個文件:

  • dist/cropper.css
  • dist/cropper.js

最簡單的辦法是直接在HTML中引用這兩個文件,不過每個項目的情況不同,可以根據情況來決定如何引入這兩個文件。

Online Demo

 

Support formats: JPG, PNG

Large

Medium

Small

使用說明

Image Cropper是因為一個裁剪頭像並上傳的需求誕生的。

一個裁剪頭像的流程大概是這樣:

  • 用戶選擇一張本地圖片。
  • 用戶使用鼠標拖拽裁剪頭像,並實時預覽不同大小的裁剪效果。
  • 把用戶的裁剪范圍和圖片提交到服務器端。

從提交到服務器端的角度來看,我們關注的點只有兩個:

  • 用戶選擇的本地圖片
  • 用戶的裁剪結果(Rect: 相對於圖片的left、top、width、height)

在Angular中使用

Image Cropper在同一個頁面上可以指定多個Instance,該屬性定義一個字符串,作為Image Cropper的一個實例的ID。

Image Cropper的ID是必需的,在下面的例子里面,我們使用avatar作為例子中的Image Cropper的實例的ID。

Image Cropper為Angular提供了三個屬性Directive,通過這三個Directive的配合,即可實現圖像裁剪和預覽的效果。

  • cropper:添加到要顯示裁剪框的元素上,該directive的屬性值是cropper的ID。
  • cropper-preview:添加到要顯示預覽的元素上。
  • cropper-source:添加到input type=file上。

注意:下面例子中的data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7是一個空的gif文件,用來在用戶未選擇圖片的情況下顯示該圖片。

cropper

cropper需要添加到要顯示裁剪框的元素上,directive的屬性值為Image Cropper的實例的ID,例如:

<div class="image-container target" cropper="avatar">
  <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="noavatar" />
</div>
cropper-aspect-ratio

cropper默認的款高比為1,如果需要使用其他寬高比或者不限制寬高比,則可以設置此屬性。比如不限制寬高比,則可以這么設置:

<div class="image-container target" cropper="avatar" cropper-aspect-ratio="auto">
  <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="noavatar" />
</div>

cropper-aspect-ratio如果不是數字,則為不限制寬高比。

cropper-context

用戶的裁剪結果需要導出到Controller中的一個變量里面,我們可以使用cropper-context來指定這個變量,比如Controller中的變量名是cropContext,則這么定義:

<div class="image-container source" cropper="avatar" cropper-context="cropContext">
  <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="noavatar" />
</div>

cropper-source

cropper-source需要添加到一個input[type=file]上,directive的屬性值為Image Cropper的實例的ID,例如:

<input type="file" name="avatar" cropper-source="avatar" />

在input[type=file]的值發生變化的時候,cropper和cropper-preview會去使用用戶選擇的圖片。

cropper-file-types

Image Cropper默認支持的類型為gif、png、jpg,如果需要定義只支持者某幾種格式,比如只支持jpg、png,可以這么定義:

<input type="file" name="avatar" cropper-source="avatar" cropper-file-types="jpg,jpeg,png" />

cropper-preview

在用戶裁剪圖像的過程中,需要動態的預覽不同大小的頭像的效果,在顯示預覽圖像的元素上添加這個directive。這個directive的屬性值為Image Cropper的實例的ID,例如:

<div class="image-container small" cropper-preview="avatar">
  <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="noavatar" />
</div>

注意,如果設置了aspectRatio為非數值,即不限制裁剪圖片的寬高比,cropper-preview的HTML應該是這種結構的:

<div class="image-container small" id="preview-small">
  <div class="image-wrapper">
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="noavatar" />
  </div>
</div>

獨立使用

Image Cropper是可以不和Angular集成,獨立使用的。如果你的頁面中沒有Angular,則在window上可以直接使用Cropper。

創建Cropper實例

獨立使用Cropper,需要指定這么幾個屬性:

  • element:顯示裁剪框的Element。
  • aspectRatio:裁剪框的寬高比,默認值為1。如果設置非數字類型,則為不限制款高比。
  • previews:數組類型,可以指定多個顯示圖片預覽的元素。
  • onCroppedRectChange:在裁剪結果變更之后會觸發這個回調。

一個例子如下:

var cropper = new Cropper({
    element: document.getElementById('cropper-target'),
    previews: [
      document.getElementById('preview-large'),
      document.getElementById('preview-medium'),
      document.getElementById('preview-small')
    ],
    onCroppedRectChange: function(rect) {
      console.log(rect);
    }
});

更改Cropper使用的圖片

Image Cropper為Angular提供了一個cropper-source來在input[type=file]變更之后更改Cropper的圖片,在獨立使用的時候,需要手動去做這件事。

變更Cropper的圖片使用setImage方法來完成,假設input[type=file]的id為cropper-input,示例代碼如下:

var input = document.getElementById('cropper-input');
input.onchange = function() {
  if (typeof FileReader !== 'undefined') {
    var reader = new FileReader();
    reader.onload = function (event) {
      cropper.setImage(event.target.result);
    };
    if (input.files && input.files[0]) {
      reader.readAsDataURL(input.files[0]);
    }
  } else { // IE10-
    input.select();
    input.blur();

    var src = document.selection.createRange().text;
    cropper.setImage(src);
  }
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM