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.

435 lines
15 KiB

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