html5調用手機攝像頭


<input type="file" accept="image/*" capture="camera">
<input type="file" accept="video/*" capture="camcorder">
<input type="file" accept="audio/*" capture="microphone">

capture表示,可以捕獲到系統默認的設備,比如:camera--照相機;camcorder--攝像機;microphone--錄音。
accept表示,直接打開系統文件目錄。

其實html5的input:file標簽還支持一個multiple屬性,表示可以支持多選,如:

<input type="file" accept="image/*" multiple>

限制只能選擇圖片

<input type="file" accept="image/*">  

限制只能選擇視頻

<input type="file" accept="video/*">  

限制只能選擇音頻

<input type="file" accept="audio/*">  

直接打開攝像頭拍照

<input type="file" accept="image/*" capture="camera"> 

直接打開攝像頭錄像

<input type="file" accept="video/*" capture="camera">  

圖片壓縮

document.getElementById('file').addEventListener('change', function() {
var reader = new FileReader();
reader.onload = function (e) {
compress(this.result);
};
reader.readAsDataURL(this.files[0]);
}, false);

不管文件域是用何種方式打開的,都可以在 change 事件中獲取到選擇的文件或拍攝的照片。

創建一個FileReader對象,我們需要調用readAsDataURL把文件轉換為base64圖像編碼,如data:image/jpeg;base64……這種格式。
onload是一個異步回調,當文件讀取完執行該方法內代碼。this.result記錄讀取結果,如果讀取失敗,該值為null。在這里進行圖片壓縮的具體操作。

var compress = function (res) {
var img = new Image(),
maxH = 160;
img.onload = function () {
var cvs = document.createElement('canvas'),
ctx = cvs.getContext('2d');
if(img.height > maxH) {
img.width *= maxH / img.height;
img.height = maxH;
}
cvs.width = img.width;
cvs.height = img.height;
ctx.clearRect(0, 0, cvs.width, cvs.height);
ctx.drawImage(img, 0, 0, img.width, img.height);
var dataUrl = cvs.toDataURL('image/jpeg', 0.6);
// 上傳略
}
img.src = res;
}

創建一個Image對象,給src屬性賦值為讀取結果,同樣在onload異步回調中編寫處理圖片的代碼。
這里就要開始使用canvas進行圖片壓縮了。

首先是尺寸按比例縮放,然后把圖片繪到畫布上,最后調用toDataURL方法壓縮圖像質量。

context.toDataURL('MIME類型', 圖像質量0-1); // 該方法返回base64圖像編碼

代碼里省略了一些校監操作,如文件類型約束和文件大小判斷(小於一定值可以不壓縮)。
最后就是把數據發送到后端的操作,這里就不說了。

 

Html5調用攝像頭

通過以上的代碼已經可以實現調用手機相機拍照、壓縮、上傳這一整套流程了。
不過在折騰的過程中也發現了一種調用攝像頭的方法。注意,是攝像頭!使用input調用的是相機。其中的差別就是攝像頭是只捕獲畫面,相機還包括原生的一些拍照、設置等控件。

通過對攝像頭的調用可以做很多有趣的事,比如拍照美化、濾鏡等。可以說實現一個第三方相機是沒問題的。
之前下載過一款安卓相機APP,不到100K的大小,可以實現拍照的一些風格化,也許就是Html5實現的呢。

需要用到的是 getUserMedia API,具體的實現這里就不貼了。


免責聲明!

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



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