轉載了一個呼叫攝像頭拍照的cordova案例
阿新 • • 發佈:2019-01-24
“ | camera物件提供對裝置預設攝像頭應用程式的訪問。 |
-
camera.getpicture
引數:
- camerasuccess
- cameraerror
-
cameraoptions
camera.getpicture |
選擇使用攝像頭拍照,或從裝置相簿中獲取一張照片。圖片以base64編碼的字串或圖片uri形式返回。
簡單的範例:
- navigator.camera.getpicture( camerasuccess, cameraerror, [ cameraoptions ] );
說明:
camera.getpicture函式開啟裝置的預設攝像頭應用程式
如果camera.sourcetype = camera.picturesourcetype.photolibrary或camera.picturesourcetype.savedphotoalbum,系統彈出照片選擇對話方塊,使用者可以從相集中選擇照片。
返回值會按照使用者通過cameraoptions引數所設定的下列格式之一發送給camerasuccess回撥函式:
-
一個字串,包含base64編碼的照片影象(預設情況)。
-
一個字串,表示在本地儲存的影象檔案位置。
- 通過標籤渲染圖片(參看後續範例)
- 儲存為本地資料(localstorage,lawnchair*等)
-
將資料傳送到遠端伺服器
支援的平臺:
- android
- blackberry webworks (os 5.0或更高版本)
-
ios
簡單的範例:
拍照並獲取base64編碼的影象:
-
navigator.camera.getpicture(onsuccess, onfail, { quality: 50 });
-
function onsuccess(imagedata) {
-
var image = document.getelementbyid('myimage');
-
image.src = "data:image/jpeg;base64," + imagedata;
-
}
-
function onfail(message) {
-
alert('failed because: ' + message);
- }
-
navigator.camera.getpicture(onsuccess, onfail, { quality: 50,
-
destinationtype: camera.destinationtype.file_uri });
-
function onsuccess(imageuri) {
-
var image = document.getelementbyid('myimage');
-
image.src = imageuri;
-
}
-
function onfail(message) {
-
alert('failed because: ' + message);
- }
-
<!doctype html>
-
<html>
-
<head>
-
<title>capture photo</title>
-
<script type="text/javascript" charset="utf-8" src="phonegap.js "></script>
-
<script type="text/javascript" charset="utf-8">
-
var picturesource; //圖片來源
-
var destinationtype; //設定返回值的格式
-
// 等待phonegap連線裝置
-
document.addeventlistener("deviceready",ondeviceready,false);
-
// phonegap準備就緒,可以使用!
-
function ondeviceready() {
-
picturesource=navigator.camera.picturesourcetype;
-
destinationtype=navigator.camera.destinationtype;
-
}
-
// 當成功獲得一張照片的base64編碼資料後被呼叫
-
function onphotodatasuccess(imagedata) {
-
// 取消註釋以檢視base64編碼的影象資料
-
// console.log(imagedata);
-
// 獲取影象控制代碼
-
var smallimage = document.getelementbyid('smallimage');
-
// 取消隱藏的影象元素
-
smallimage.style.display = 'block';
-
// 顯示拍攝的照片
-
// 使用內嵌css規則來縮放圖片
-
smallimage.src = "data:image/jpeg;base64," + imagedata;
-
}
-
// 當成功得到一張照片的uri後被呼叫
-
function onphotourisuccess(imageuri) {
-
// 取消註釋以檢視圖片檔案的uri
-
// console.log(imageuri);
-
// 獲取圖片控制代碼
-
var largeimage = document.getelementbyid('largeimage');
-
// 取消隱藏的影象元素
-
largeimage.style.display = 'block';
-
// 顯示拍攝的照片
-
// 使用內嵌css規則來縮放圖片
-
largeimage.src = imageuri;
-
}
-
// “capture photo”按鈕點選事件觸發函式
-
function capturephoto() {
-
// 使用裝置上的攝像頭拍照,並獲得base64編碼字串格式的影象
-
navigator.camera.getpicture(onphotodatasuccess, onfail, { quality: 50 });
-
}
-
// “capture editable photo”按鈕點選事件觸發函式
-
function capturephotoedit() {
-
// 使用裝置上的攝像頭拍照,並獲得base64編碼字串格式的可編輯影象
-
navigator.camera.getpicture(onphotodatasuccess, onfail, { quality: 20, allowedit: true });
-
}
-
//“from photo library”/“from photo album”按鈕點選事件觸發函式
-
function getphoto(source) {
-
// 從設定的來源處獲取影象檔案uri
-
navigator.camera.getpicture(onphotourisuccess, onfail, { quality: 50,
-
destinationtype: destinationtype.file_uri,sourcetype: source });
-
}
-
// 當有錯誤發生時觸發此函式
-
function onfail(mesage) {
-
alert('failed because: ' + message);
-
}
-
</script>
-
</head>
-
<body>
-
<button onclick="capturephoto();">capture photo</button> <br>
-
<button onclick="capturephotoedit();">capture editable photo</button> <br>
-
<button onclick="getphoto(picturesource.photolibrary);">from photo library</button><br>
-
<button onclick="getphoto(picturesource.savedphotoalbum);">from photo album</button><br>
-
<img style="display:none;width:60px;height:60px;" id="smallimage" src="" />
-
<img style="display:none;" id="largeimage" src="" />
-
</body>
- </html>
camerasuccess |
-
function(imagedata) {
-
// 對影象進行處理
- }
-
imagedata:根據cameraoptions的設定值,為base64編碼的影象資料或影象檔案的uri。(字串型別)
範例:
-
// 顯示圖片
-
function cameracallback(imagedata) {
-
var image = document.getelementbyid('myimage');
-
image.src = "data:image/jpeg;base64," + imagedata;
- }
cameraerror |
-
function(message) {
-
// 顯示有用資訊
- }
-
message:裝置本
地程式碼提供的錯誤資訊。(字串型別)
cameraoptions |
定製攝像頭設定的可選引數。
-
{ quality : 75,
-
destinationtype : camera.destinationtype.data_url,
-
sourcetype : camera.picturesourcetype.camera,
-
allowedit : true,
-
encodingtype : camera.encodingtype.jpeg,
-
targetwidth : 100,
- targetheight : 100};
- quality:儲存影象的質量,範圍是[0,100]。(數字型別)
-
destinationtype:選擇返回資料的格式。通過navigator.camera.destinationtype進行定義。(數字型別)
-
camera.destinationtype = {
-
data_url : 0, //返回base64編碼字串的影象資料
-
file_uri : 1 //返回影象檔案的uri
- }
-
sourcetype:設定圖片來源。通過nagivator.camera.picturesourcetype進行定義。(數字型別)
-
camera.picturesourcetype = {
-
photolibrary : 0,
-
camera : 1,
-
savedphotoalbum : 2
- }
- allowedit:在選擇圖片進行操作之前允許對其進行簡單編輯。(布林型別)
-
encodingtype:選擇返回影象檔案的編碼方式,通過navigator.camera.encodingtype進行定義。(數字型別)
-
camera.encodingtype = {
-
jpeg : 0, // 返回jpeg格式圖片
-
png : 1 // 返回png格式圖片
- };
- targetwidth:以畫素為單位的影象縮放寬度,必須和targetheight同時使用。相應的寬高比保持不變。(數字型別)
-
targetheight:以畫素為單位的影象縮放高度,必須和targetwidth同時使用。相應的寬高比保持不變。(數字型別)
- 忽略allowedit引數。
- camera.picturesourcetype.photolibrary 或 camera.picturesourcetype.savedphotoalbum 都會顯示同一個相集。
-
camera.encodingtype不被支援。
blackberry的特異情況:
- 忽略quality引數。
- 忽略sourcetype引數。
- 忽略allowedit引數。
- 當拍照結束後,應用程式必須有按鍵注入許可權才能關閉本地camera應用程式。
-
使用大影象尺寸,可能會導致新近帶有高解析度攝像頭的型號裝置無法對影象進行編碼(如:torch 9800)。
palm的特異情況:
- 忽略quality引數。
- 忽略sourcetype引數。
-
忽略allowedit引數。
iphone的特異情況:
- 為了避免部分裝置上出現記憶體錯誤,quality的設定值要低於50。
- 當使用destinationtype.file_uri時,使用攝像頭拍攝的和編輯過的照片會儲存到應用程式的documents/tmp目錄。
- <span javascript"="" style="margin: 0px; padding: 0px; border: 0px; outline: 0px; background: transparent; max-width: 650px; height: auto;">var url = window.location.href;document.write("此文連結:"+url+" ");document.write("轉載請註明出處:"+document.title+"");