You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

420 lines
16 KiB

  1. <!---
  2. # license: Licensed to the Apache Software Foundation (ASF) under one
  3. # or more contributor license agreements. See the NOTICE file
  4. # distributed with this work for additional information
  5. # regarding copyright ownership. The ASF licenses this file
  6. # to you under the Apache License, Version 2.0 (the
  7. # "License"); you may not use this file except in compliance
  8. # with the License. You may obtain a copy of the License at
  9. #
  10. # http://www.apache.org/licenses/LICENSE-2.0
  11. #
  12. # Unless required by applicable law or agreed to in writing,
  13. # software distributed under the License is distributed on an
  14. # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15. # KIND, either express or implied. See the License for the
  16. # specific language governing permissions and limitations
  17. # under the License.
  18. -->
  19. # cordova-plugin-camera
  20. [![Build Status](https://travis-ci.org/apache/cordova-plugin-camera.svg)](https://travis-ci.org/apache/cordova-plugin-camera)
  21. 這個外掛程式定義了一個全球 `navigator.camera` 物件,它提供了 API,拍照,從系統的圖像庫中選擇圖像。
  22. 雖然該物件附加到全球範圍內 `導航器`,它不可用直到 `deviceready` 事件之後。
  23. document.addEventListener("deviceready", onDeviceReady, false);
  24. function onDeviceReady() {
  25. console.log(navigator.camera);
  26. }
  27. ## 安裝
  28. cordova plugin add cordova-plugin-camera
  29. ## API
  30. * 相機
  31. * navigator.camera.getPicture(success, fail, options)
  32. * CameraOptions
  33. * CameraPopoverHandle
  34. * CameraPopoverOptions
  35. * navigator.camera.cleanup
  36. ## navigator.camera.getPicture
  37. 需要一張照片,使用相機,或從設備的圖像庫檢索一張照片。 圖像被傳遞給成功回檔的 base64 編碼 `String`,或作為 URI 為影像檔。 該方法本身返回一個 `CameraPopoverHandle` 物件,它可以用來重新置放檔選擇氣泡框。
  38. navigator.camera.getPicture(cameraSuccess, cameraError, cameraOptions);
  39. #### 說明
  40. `camera.getPicture` 函數打開該設備的預設攝像頭應用程式,允許使用者拍照。 `Camera.sourceType` 等於 `Camera.PictureSourceType.CAMERA` 時,預設情況下,發生此行為。 一旦使用者打斷了他的照片,相機應用程式關閉,且應用程式還原。
  41. 如果 `Camera.sourceType``Camera.PictureSourceType.PHOTOLIBRARY``Camera.PictureSourceType.SAVEDPHOTOALBUM`,然後顯示一個對話方塊,允許使用者選擇一個現有的圖像。 `camera.getPicture` 函數返回一個 `CameraPopoverHandle` 物件,它可以用於重新置放圖像選擇的對話方塊,例如,當設備的方向變化。
  42. 傳回值是發送到 `cameraSuccess` 回呼函數中,在以下的格式,具體取決於指定的 `cameraOptions` 之一:
  43. * A `String` 包含的 base64 編碼的照片圖像。
  44. * A `String` 表示在本機存放區 (預設值) 上的影像檔位置。
  45. 你可以做任何你想要的編碼的圖像或 URI,例如:
  46. * 呈現在圖像 `<img>` 標記,如下面的示例所示
  47. * 保存本地的資料 ( `LocalStorage` , [Lawnchair](http://brianleroux.github.com/lawnchair/),等等.)
  48. * 將資料發佈到遠端伺服器
  49. **注**: 在更新設備上的照片解析度是很好。 選擇從設備的庫的照片是不壓縮螢幕使其以較低的品質,即使指定了一個 `quality` 參數。 要避免常見的記憶體問題,請將 `Camera.destinationType` 設置為 `FILE_URI`,而不是 `DATA_URL`.
  50. #### 支援的平臺
  51. ![](doc/img/android-success.png) ![](doc/img/blackberry-success.png) ![](doc/img/browser-success.png) ![](doc/img/firefox-success.png) ![](doc/img/fireos-success.png) ![](doc/img/ios-success.png) ![](doc/img/windows-success.png) ![](doc/img/wp8-success.png) ![](doc/img/ubuntu-success.png)
  52. #### 示例
  53. 拍一張照片,並檢索它作為一個 base64 編碼的圖像:
  54. navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
  55. destinationType: Camera.DestinationType.DATA_URL
  56. });
  57. function onSuccess(imageData) {
  58. var image = document.getElementById('myImage');
  59. image.src = "data:image/jpeg;base64," + imageData;
  60. }
  61. function onFail(message) {
  62. alert('Failed because: ' + message);
  63. }
  64. 拍一張照片和檢索圖像的檔位置:
  65. navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
  66. destinationType: Camera.DestinationType.FILE_URI });
  67. function onSuccess(imageURI) {
  68. var image = document.getElementById('myImage');
  69. image.src = imageURI;
  70. }
  71. function onFail(message) {
  72. alert('Failed because: ' + message);
  73. }
  74. #### 首選項 (iOS)
  75. * **CameraUsesGeolocation**(布林值,預設值為 false)。 用於捕獲 jpeg 檔,設置為 true,以在 EXIF 頭資訊中獲取地理定位資料。 這將觸發請求的地理位置的許可權,如果設置為 true。
  76. <preference name="CameraUsesGeolocation" value="false" />
  77. #### 亞馬遜火 OS 怪癖
  78. 亞馬遜火 OS 使用意圖啟動相機活動設備來捕捉圖像上, 和手機上記憶體不足,科爾多瓦活動可能被殺害。 在這種情況下,可能不會顯示圖像時恢復了科爾多瓦活動。
  79. #### Android 的怪癖
  80. Android 使用意圖以啟動相機活動設備來捕捉圖像上, 和手機上記憶體不足,科爾多瓦活動可能被殺害。 在這種情況下,可能不會顯示圖像時恢復了科爾多瓦活動。
  81. #### 瀏覽器的怪癖
  82. 可以只返回照片作為 base64 編碼的圖像。
  83. #### 火狐瀏覽器作業系統的怪癖
  84. 觀景窗外掛程式目前實施使用 [Web 活動](https://hacks.mozilla.org/2013/01/introducing-web-activities/).
  85. #### iOS 的怪癖
  86. 包括 JavaScript `alert ()` 中的回呼函數會導致問題。 包裝內 `setTimeout()` 允許 iOS 圖像選取器或氣泡框以完全關閉之前,警報將顯示警報:
  87. setTimeout(function() {
  88. // do your thing here!
  89. }, 0);
  90. #### Windows Phone 7 的怪癖
  91. 調用本機攝像頭應用程式,而通過 Zune 所連接的設備不能工作,並且觸發錯誤回檔。
  92. #### Tizen 怪癖
  93. 泰只支援 `destinationType``Camera.DestinationType.FILE_URI``Camera.PictureSourceType.PHOTOLIBRARY``sourceType`.
  94. ## CameraOptions
  95. 要自訂相機設置的可選參數。
  96. { quality : 75,
  97. destinationType : Camera.DestinationType.DATA_URL,
  98. sourceType : Camera.PictureSourceType.CAMERA,
  99. allowEdit : true,
  100. encodingType: Camera.EncodingType.JPEG,
  101. targetWidth: 100,
  102. targetHeight: 100,
  103. popoverOptions: CameraPopoverOptions,
  104. saveToPhotoAlbum: false };
  105. * **品質**: 保存的圖像,表示為範圍 0-100,100,是通常全解析度,無損失從檔案壓縮的品質。 預設值為 50。 *(人數)*(請注意相機的解析度有關的資訊是不可用)。
  106. * **可**: 選擇傳回值的格式。預設值是 FILE_URI。定義在 `navigator.camera.DestinationType` *(人數)*
  107. Camera.DestinationType = {
  108. DATA_URL : 0, // Return image as base64-encoded string
  109. FILE_URI : 1, // Return image file URI
  110. NATIVE_URI : 2 // Return image native URI (e.g., assets-library:// on iOS or content:// on Android)
  111. };
  112. * **時**: 設置圖片的來源。預設值是觀景窗。定義在 `navigator.camera.PictureSourceType` *(人數)*
  113. Camera.PictureSourceType = {
  114. PHOTOLIBRARY : 0,
  115. CAMERA : 1,
  116. SAVEDPHOTOALBUM : 2
  117. };
  118. * **allowEdit**: 允許簡單編輯前選擇圖像。*(布林)*
  119. * **encodingType**: 選擇返回的影像檔的編碼。預設值為 JPEG。定義在 `navigator.camera.EncodingType` *(人數)*
  120. Camera.EncodingType = {
  121. JPEG : 0, // Return JPEG encoded image
  122. PNG : 1 // Return PNG encoded image
  123. };
  124. * **targetWidth**: 向尺度圖像的圖元寬度。必須用**targetHeight**。縱橫比保持不變。*(人數)*
  125. * **targetHeight**: 以圖元為單位向尺度圖像的高度。必須用**targetWidth**。縱橫比保持不變。*(人數)*
  126. * **媒體類型**: 設置的媒體,從選擇類型。 時才起作用 `PictureSourceType``PHOTOLIBRARY``SAVEDPHOTOALBUM` 。 定義在 `nagivator.camera.MediaType` *(人數)*
  127. Camera.MediaType = {
  128. PICTURE: 0, // allow selection of still pictures only. 預設情況。 Will return format specified via DestinationType
  129. VIDEO: 1, // allow selection of video only, WILL ALWAYS RETURN FILE_URI
  130. ALLMEDIA : 2 // allow selection from all media types
  131. };
  132. * **correctOrientation**: 旋轉圖像,該設備時捕獲的定向的正確。*(布林)*
  133. * **saveToPhotoAlbum**: 將圖像保存到相冊在設備上捕獲後。*(布林)*
  134. * **popoverOptions**: 只有 iOS 在 iPad 中指定氣泡框位置的選項。在中定義`CameraPopoverOptions`.
  135. * **cameraDirection**: 選擇相機以使用 (前面或後面-面向)。預設值是背。定義在 `navigator.camera.Direction` *(人數)*
  136. Camera.Direction = {
  137. BACK : 0, // Use the back-facing camera
  138. FRONT : 1 // Use the front-facing camera
  139. };
  140. #### 亞馬遜火 OS 怪癖
  141. * 任何 `cameraDirection` 值回朝的照片中的結果。
  142. * 忽略 `allowEdit` 參數。
  143. * `Camera.PictureSourceType.PHOTOLIBRARY``Camera.PictureSourceType.SAVEDPHOTOALBUM` 都顯示相同的相冊。
  144. #### Android 的怪癖
  145. * 任何 `cameraDirection` 值回朝的照片中的結果。
  146. * 安卓也用於作物活動 allowEdit,即使作物應工作,實際上將裁剪的圖像傳回給科爾多瓦,那個唯一的作品一直是一個與谷歌加上照片應用程式捆綁在一起。 其他作物可能無法工作。
  147. * `Camera.PictureSourceType.PHOTOLIBRARY``Camera.PictureSourceType.SAVEDPHOTOALBUM` 都顯示相同的相冊。
  148. #### 黑莓 10 怪癖
  149. * 忽略 `quality` 參數。
  150. * 忽略 `allowEdit` 參數。
  151. * `Camera.MediaType`不受支援。
  152. * 忽略 `correctOrientation` 參數。
  153. * 忽略 `cameraDirection` 參數。
  154. #### 火狐瀏覽器作業系統的怪癖
  155. * 忽略 `quality` 參數。
  156. * `Camera.DestinationType`將被忽略並且等於 `1` (影像檔的 URI)
  157. * 忽略 `allowEdit` 參數。
  158. * 忽略 `PictureSourceType` 參數 (使用者選擇它在對話方塊視窗中)
  159. * 忽略`encodingType`
  160. * 忽略了 `targetWidth` 和`targetHeight`
  161. * `Camera.MediaType`不受支援。
  162. * 忽略 `correctOrientation` 參數。
  163. * 忽略 `cameraDirection` 參數。
  164. #### iOS 的怪癖
  165. * 設置 `quality` 低於 50,避免在某些設備上的記憶體不足錯誤。
  166. * 當使用 `destinationType.FILE_URI` ,照片都保存在應用程式的臨時目錄。應用程式結束時,將刪除該應用程式的臨時目錄中的內容。
  167. #### Tizen 怪癖
  168. * 不支援的選項
  169. * 總是返回一個檔的 URI
  170. #### Windows Phone 7 和 8 怪癖
  171. * 忽略 `allowEdit` 參數。
  172. * 忽略 `correctOrientation` 參數。
  173. * 忽略 `cameraDirection` 參數。
  174. * 忽略 `saveToPhotoAlbum` 參數。 重要: 使用 wp7/8 科爾多瓦攝像頭 API 拍攝的所有圖像總是都複製到手機的相機膠捲。 根據使用者的設置,這可能也意味著圖像是自動上傳到他們另。 這有可能意味著的圖像,可以比你的應用程式的目的更多的觀眾。 如果此阻滯劑您的應用程式,您將需要實現 CameraCaptureTask 在 msdn 上記載: [HTTP://msdn.microsoft.com/en-us/library/windowsphone/develop/hh394006.aspx](http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh394006.aspx)你可能還評論或在[問題追蹤器](https://issues.apache.org/jira/browse/CB-2083)的向上投票的相關的問題
  175. * 忽略了 `mediaType` 屬性的 `cameraOptions` 作為 Windows Phone SDK 並不提供從 PHOTOLIBRARY 中選擇視頻的方法。
  176. ## CameraError
  177. onError 的回呼函數提供了一條錯誤訊息。
  178. function(message) {
  179. // Show a helpful message
  180. }
  181. #### 說明
  182. * **message**: 消息提供的設備的本機代碼。*(String)*
  183. ## cameraSuccess
  184. 提供的圖像資料的 onSuccess 回呼函數。
  185. function(imageData) {
  186. // Do something with the image
  187. }
  188. #### 說明
  189. * **imageData**: Base64 編碼進行編碼的圖像資料,*或*影像檔的 URI,取決於 `cameraOptions` 效果。*(String)*
  190. #### 示例
  191. // Show image
  192. //
  193. function cameraCallback(imageData) {
  194. var image = document.getElementById('myImage');
  195. image.src = "data:image/jpeg;base64," + imageData;
  196. }
  197. ## CameraPopoverHandle
  198. `navigator.camera.getPicture` 創建的氣泡框對話方塊的控制碼.
  199. #### 說明
  200. * **setPosition**: Set the position of the popover. Takes the `CameraPopoverOptions` that specify the new position.
  201. #### 支援的平臺
  202. ![](doc/img/android-fail.png) ![](doc/img/blackberry-fail.png) ![](doc/img/browser-fail.png) ![](doc/img/firefox-fail.png) ![](doc/img/fireos-fail.png) ![](doc/img/ios-success.png) ![](doc/img/windows-fail.png) ![](doc/img/wp8-fail.png) ![](doc/img/ubuntu-fail.png)
  203. #### 示例
  204. var cameraPopoverHandle = navigator.camera.getPicture(onSuccess, onFail,
  205. { destinationType: Camera.DestinationType.FILE_URI,
  206. sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
  207. popoverOptions: new CameraPopoverOptions(300, 300, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY)
  208. });
  209. // Reposition the popover if the orientation changes.
  210. window.onorientationchange = function() {
  211. var cameraPopoverOptions = new CameraPopoverOptions(0, 0, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY);
  212. cameraPopoverHandle.setPosition(cameraPopoverOptions);
  213. }
  214. ## CameraPopoverOptions
  215. iOS 僅指定氣泡框的錨元素的位置和箭頭方向,從 iPad 庫或專輯選擇圖像時的參數。
  216. { x : 0,
  217. y : 32,
  218. width : 320,
  219. height : 480,
  220. arrowDir : Camera.PopoverArrowDirection.ARROW_ANY
  221. };
  222. #### 說明
  223. * **x**: x 螢幕元素到其錨定氣泡框上的圖元座標。*(人數)*
  224. * **y**: 螢幕元素到其錨定氣泡框上的 y 圖元座標。*(人數)*
  225. * **width**: 寬度以圖元為單位),到其錨定氣泡框上的螢幕元素。*(人數)*
  226. * **height**: 高度以圖元為單位),到其錨定氣泡框上的螢幕元素。*(人數)*
  227. * **arrowDir**: 氣泡框上的箭頭應指向的方向。定義在 `Camera.PopoverArrowDirection` *(人數)*
  228. Camera.PopoverArrowDirection = {
  229. ARROW_UP : 1, // matches iOS UIPopoverArrowDirection constants
  230. ARROW_DOWN : 2,
  231. ARROW_LEFT : 4,
  232. ARROW_RIGHT : 8,
  233. ARROW_ANY : 15
  234. };
  235. 請注意氣泡框的大小可能會更改箭頭的方向和螢幕的方向進行調整。 請確保帳戶方向更改時指定錨元素位置。
  236. ## navigator.camera.cleanup
  237. 刪除中間從臨時存儲攝像機所拍攝的照片。
  238. navigator.camera.cleanup( cameraSuccess, cameraError );
  239. #### 說明
  240. 刪除保留在臨時存儲在調用 `camera.getPicture` 後的中間的影像檔。 適用只有當 `Camera.sourceType` 的值等於 `Camera.PictureSourceType.CAMERA``Camera.destinationType` 等於 `Camera.DestinationType.FILE_URI`.
  241. #### 支援的平臺
  242. ![](doc/img/android-fail.png) ![](doc/img/blackberry-fail.png) ![](doc/img/browser-fail.png) ![](doc/img/firefox-fail.png) ![](doc/img/fireos-fail.png) ![](doc/img/ios-success.png) ![](doc/img/windows-fail.png) ![](doc/img/wp8-fail.png) ![](doc/img/ubuntu-fail.png)
  243. #### 示例
  244. navigator.camera.cleanup(onSuccess, onFail);
  245. function onSuccess() {
  246. console.log("Camera cleanup success.")
  247. }
  248. function onFail(message) {
  249. alert('Failed because: ' + message);
  250. }