寫在前面(2017-11-03):現在在做Python研發,cordova早已忘卻,尤其是技術細節,大家問我我也不會了,還請見諒!
Cordova相機插件中文翻譯
? ? ? ? ? 這個插件定義了一個全局對象navigator.camera,它用來提供拍照和從系統相冊里選取圖片的API。
安裝:
1.需要最新的cordova 5.0:
cordova plugin add cordova-plugin-camera
2.通過ID安裝舊版本的cordova
cordova plugin add org.apache.cordova.camera
3.當然,也可以通過下載直接添加:(不穩定)
cordova plugin add https://github.com/apache/cordova- plugin-camera.git
怎么Contribute?(省略)
該文件由npm生成
提供的API
.camera
? ? ? 。.getPicture(successCallback,errorCallback,options)
? ? ? 。cleanup()
? ? ? 。onError:函數
? ? ? 。onSuccess:函數
? ? ? 。CameraOptions:對象
.Camera
? ? ? 。DestinationType:枚舉
? ? ? 。EncodingType:枚舉
? ? ? 。MediaType:枚舉
? ? ? 。PictureSourceType:枚舉
? ? ? 。PopoverArrowDirection:枚舉
? ? ? 。Direction:枚舉
.CameraPopoverHandle
.CameraPopoverOptions
camera
1.camera.getPicture(successCallback, errorCallback, options)
通過相機或者設備的相冊獲取到圖片,如果傳遞成功會回調一個Base64編碼的字符串或者圖像文件的URI(統一資源標識符)。
camera.getPicture這個函數會打開設備的默認攝像頭,允許用戶在默認情況下拍攝圖片,當Camera.sourceType等于Camera.PictureSourceType.CAMERA,就會掉用攝像頭。一旦用戶獲取到了圖片,相機程序關閉并且恢復原程序。
當Camera.sourceType是Camera.PictureSourceType.PHOTOLIBRARY或Camera.PictureSourceType.SAVEDPHOTOALBUM的話,會跳到系統相冊讓用戶選擇圖片。
當camera.getPicture函數返回一個CameraPopoverHandle對象,它可用于重新設定圖像選擇對話框,例如,設備方向改變時。
返回值被發送到cameraSuccess回調函數,然后可以在cameraOptions中指定它們:
? ? ? .一個字符串包含base64編碼的照片圖像
? ? ? .一個字符串表示圖像文件的本地儲存位置(URL)
你可以對base64編碼的字符串或者URI做任何事兒,比如說:
? ? ?.讓這個圖片成為一個<img>,就像下面的例子一樣
? ? ?.存儲在本地(LocalStorage,Lawnchair等等)
? ? ?.把它傳給遠程服務器
注:新設備的照片像素很高,從設備相冊選取的圖片不會被縮減質量(甚至它已經指定了分辨率),為了內存問題,設置Camera.destinationType為FILE_URI而不是DATA_URL。
支持平臺
安卓,黑莓10,瀏覽器,火狐os,亞馬遜os,iOS,windows,wp8,ubuntu
類型:相機的靜態方法:
參數----------------------------類型-----------描述----
successCallback-----------------onSuccess------ ? ? ? ?----
errorCallback-------------------onError-------- ? ? ? ? ?----
options------------------------CameraOptions--CameraOptions-
例子:
navigator.camera.getPicture(cameraSuccess, cameraError, cameraOptions);
2.camera.cleanup()
移除掉用camera.getPicture函數之后的本地儲存,只有Camera.sourceType的值等于Camera.PictureSourceType.CAMERA和Camera.destinationType等于Camera.DestinationType.FILE_URI的時候會掉用。
支持平臺:iOS
類型:相機的靜態方法
示例:
navigator.camera.cleanup(onSuccess, onFail);
functiononSuccess() {
console.log("Camera cleanup success.")
}
functiononFail(message) {
alert('Failed because: '+message);
}
3.camera.onError :(函數)
回調一條錯誤信息
類型:相機的靜態方法
參數--------------------------類型-----------------------------描述
message------------------------string-------------------------由原生代碼提供
4.camera.onSuccess:(函數)
回調圖像的數據
類型:相機的靜態方法
參數--------------類型-----------------------------描述
imageData---------string------基于cameraOptions的圖像Base64編碼或者圖像文件的URI
示例:
// Show image
//
functioncameraCallback(imageData) {
varimage=document.getElementById('myImage');
image.src="data:image/jpeg;base64,"+imageData;
}
5.camera.CameraOptions :對象
可選參數自定義相機設置。
類型:相機的靜態方法
特性表:
變量名-類型-默認值-描述(不知道怎么在簡書創建表格,蛋疼)
quality--number--50--圖像的保存質量,范圍0-100,100是最大值,最高的分辨率,沒有任何壓縮損失(請注意有關該相機的分辨率信息不可用。)
destinationType--DestinationType--FILE_URI--選擇返回值的格式
sourceType--PictureSourceType--CAMERA--設置圖像來源
allowEdit--Boolean--true--允許在選擇圖片之前進行簡單的編輯
encodingType--EncodingType--JPEG--選擇圖像的返回編碼
targetWidth--number--空--寬度像素用來縮放圖像。必須和targetHeight一起使用。長寬比保持不變。
targetHeight--number--空--長度像素用來縮放圖像。必須和targetWidth一起使用。長寬比保持不變。
mediaType--MediaType--PICTURE--選擇media類型。它只適用PictureSourceType是PHOTOLIBRARY或SAVEDPHOTOALBUM。
correctOrientation--Boolean--空--如果是橫向拍攝的照片,會自動旋轉
saveToPhotoAlbum--Boolean--空--拍攝的圖像是否保存在設備的系統相冊
popoverOptions--CameraPopoverOptions--空--設定在ipad的popover的位置
cameraDirection--Direction--BACK--選擇前置攝像頭或者后面的攝像頭
Camera
1.Camera.DestinationType :枚舉
類型:相機的靜態枚舉屬性
特性:
變量名-類型-默認值-描述
DATA_URL--number--0--返回Base64編碼的字符串
FILE_URI--number--1--返回文件的URI(content://media/external/images/media/2 for Android)
NATIVE_URI--number--2--返回原生URI (eg. asset-library://... for iOS)
2.Camera.EncodingType :enum
類型:相機的靜態枚舉屬性
特性:
變量名-類型-默認值-描述
JPEG--number--0--返回JPEG的圖片
PNG--number--1--返回PNG的圖片
3.Camera.MediaType :enum
類型:相機的靜態枚舉屬性
特性:
變量名-類型-默認值-描述
PICTURE--number--0--僅允許選擇靜態影像。 默認。將通過DestinationType返回指定格式
VIDEO--number--1--僅允許選擇視頻,只返回網址
ALLMEDIA--number--2--允許返回所有媒體格式
4.Camera.PictureSourceType :enum
類型:相機的靜態枚舉屬性
特性:
變量名-類型-默認值-描述
PHOTOLIBRARY--number--0--從設備相冊選擇圖片
CAMERA--number--1--用攝像頭拍攝圖片
SAVEDPHOTOALBUM--number--2--從設備相冊選擇圖片(一個應該是ios一個安卓)
5.Camera.PopoverArrowDirection :enum
匹配的iOS UIPopoverArrowDirection在popover固定的箭頭位置。
類型:相機的靜態枚舉屬性
特性:
變量名-類型-默認值
ARROW_UP--number--1
ARROW_DOWN--number--2
ARROW_LEFT--number--4
ARROW_RIGHT--number--8
ARROW_ANY--number--15
6.Camera.Direction :enum
類型:相機的靜態枚舉屬性
特性:
變量名-類型-默認值-描述
BACK--number--0--使用后置攝像頭
FRONT--number--1--使用前置攝像頭
7.CameraPopoverOptions
iOS特供,從iPad的系統相冊選擇圖片,指定popover的定位元素的位置箭頭方向和參數。需要注意的是popover的尺寸可以改變,以適應屏幕的箭頭和取向方向。確保指定元素位置時考慮方向變化。
變量名-類型-默認值-描述
[x]--number--0--屏幕選取框的x坐標
[y]--number--32--屏幕選取框的y坐標
[width]--number--320--屏幕選取框的寬度
[height]--number--480--屏幕選取框的高度
[arrowDir]--PopoverArrowDirection--ARROW_ANY--確定popover的指向
8.CameraPopoverHandle
圖片選擇框的句柄
支持平臺:iOS
示例:
varcameraPopoverHandle=navigator.camera.getPicture(onSuccess, onFail,
{
destinationType:Camera.DestinationType.FILE_URI,
sourceType:Camera.PictureSourceType.PHOTOLIBRARY,
popoverOptions:newCameraPopoverOptions(300,300,100,100, Camera.PopoverArrowDirection.ARROW_ANY)
});
// Reposition the popover if the orientation changes.
window.onorientationchange=function() {
varcameraPopoverOptions=newCameraPopoverOptions(0,0,100,100, Camera.PopoverArrowDirection.ARROW_ANY);
cameraPopoverHandle.setPosition(cameraPopoverOptions);
}
9.camera.getPicture ?勘誤表
示例:
照一張照片并且獲取Base64編碼后的圖像:
navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
destinationType: Camera.DestinationType.DATA_URL
});
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);
}
。特殊(iOS)
CameraUsesGeolocation(布爾值,默認為false)。對于拍攝JPEG文件,設置為true來獲得地理定位數據的EXIF頭。這將觸發對地理位置權限的請求,如果設置為true。
(下面省略了其他操作系統的特殊情況,只顯示ios和安卓的)
。Android
安卓在低端機上調用Cordova這個插件的時候可能會被強制關掉。在這種情況在,插件的調用結果會通過resume事件。有關更多信息,請參見Android生命周期指南。pendingResult這個函數將會傳遞給回調函數一個值(URI / URL或錯誤消息)。pendingResult.pluginStatus是用來判斷調用插件是否成功的。
。iOS
包含alert()的回調函數會發生問題,內置警報器setTimeout()允許在完全關閉警報之前顯示圖像采集窗口
10.CameraOptions勘誤表(同樣只翻譯iOS和安卓)
。安卓
? ? ? ? .后置攝像頭包括任何cameraDirection的結果值
? ? ? ? .allowEdit這個在安卓上運行結果未知,不建議使用!這個插件在作用本來是為了實現用戶在設備上裁剪圖像,但是用戶可能會有不兼容的操作,導致這個插件崩潰。這個插件其實在大部分設備上是支持的,因為兼容(Google Plus Photos)這個插件,但是強制使用并不明智。如果這個功能對于你來說是很重要的,可以考慮其他的第三方插件,它們的功能一般很強大。
? ? ? ? .Camera.PictureSourceType.PHOTOLIBRARY和Camera.PictureSourceType.SAVEDPHOTOALBUM顯示的都是設備的系統相冊
? ? ? ? .如果圖像未編輯(quality=100,correctOrientation=false,沒有targetHeight或targetWidth指定),忽略encodingType,獲取到的圖片的編碼是系統默認的。
。iOS
? ? ? ? .當使用destinationType/FILE_URI時,照片保存在應用程序的臨時目錄中。當應用程序結束,這個臨時存儲會被刪除。
? ? ? ? .當使用了destinationType.NATIVE_URI和sourceType.CAMERA,照片是否出存在系統相冊是和saveToPhotoAlbum的值無關了的。