1. 程式人生 > >HTML5呼叫照相機並自定義顯示獲取到的圖片(FileReader)

HTML5呼叫照相機並自定義顯示獲取到的圖片(FileReader)

越來越多的移動端網頁流行,在手機上拍攝照片或者從相簿中選取照片並上傳的功能不可或缺。本文以例項說明上述功能如何實現,並介紹FileReader物件。

1. 需求

如下圖,點選有加號的框,拍攝或者從相簿中選擇照片後,將圖片顯示在框中。

這裡寫圖片描述

2. 程式碼

(1) 呼叫手機拍照和選擇照片

<div className="image-uploader">
    <input id="imgInput" className="imgInput" type="file" accept="image/*" />
    <img id="imgShow"
className="imgShow" src="#" alt="" />
<img className="camera" src={cameraImage} alt="" /> <img className="plus" src={plusImage} alt="" /> </div>

CSS思路是把input框,也就是實際的可點選的做成和外框一樣大,並且設定opacity:0,放在最上層。#imgShow也需要和外框一樣大,顯示獲取的圖片。

(2) 顯示圖片

監聽input的change事件,例項化FileRead物件,將內容讀取到記憶體中。載入結束後,觸發onload事件,通過其result屬性訪問圖片資料。

$('#imgInput').change(function () {
   readURL(this);
});
function readURL(input){
  if (input.files && input.files[0]) {
    const reader = new FileReader();
    reader.readAsDataURL(input.files[0]);
    reader.onload = (e) => {
        $('#imgShow').attr('src', e.target.result);
      };
   }
 }

3. 關於FileReader

(1) FileReader物件方法

FileReader物件方法有4種,有3種用來讀取檔案,1種用來中斷讀取。方法不會返回讀取結果,而是將結果儲存在result屬性中,如果讀取失敗result的值為null。

方法名 引數 描述
abort none 中斷讀取
readAsBinaryString file 將檔案讀取為二進位制碼
readAsDataURL file 將檔案讀取為 DataURL
readAsText file, [encoding] 將檔案讀取為文字

上例中,使用readAsDataURL的方式,讀取圖片路徑。

(2) 事件

事件 描述
onloadstart 讀取開始時觸發
onprogress 讀取中
onload 檔案讀取成功完成時觸發
onloadend 檔案讀取成功或失敗完成時觸發
onabort 中斷時觸發
onerror 出錯時觸發