Camera
Camera API 允许用户从相册中选择照片或拍摄新照片。在 iOS 上,这使用了 UIImagePickerController;在 Android 上,此 API 会发送一个意图(intent),默认由系统相机应用处理。
iOS 注意事项
iOS 要求在 Info.plist 文件中为你的应用添加并填写以下使用描述:
名称:Privacy - Camera Usage Description
键:NSCameraUsageDescription
名称:Privacy - Photo Library Additions Usage Description
键:NSPhotoLibraryAddUsageDescription
名称:Privacy - Photo Library Usage Description
键:NSPhotoLibraryUsageDescription
有关在 Xcode 中设置 iOS 权限的更多信息,请阅读 iOS 指南 中的 设置 iOS 权限。
Android 注意事项
此 API 需要在你的 AndroidManifest.xml 文件中添加以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
存储权限用于读取/保存照片文件。
有关设置 Android 权限的更多信息,请阅读 Android 指南 中的 设置 Android 权限。
此外,由于 Camera API 会启动一个单独的 Activity 来处理拍照,你应该在 App 插件中监听 appRestoredResult,以处理在 Activity 运行时应用被操作系统终止的情况下发送的任何相机数据。
PWA 注意事项
Camera 插件需要 PWA 元素 才能正常工作。
示例
import { Plugins, CameraResultType } from '@capacitor/core';
const { Camera } = Plugins;
async takePicture() {
const image = await Camera.getPhoto({
quality: 90,
allowEditing: true,
resultType: CameraResultType.Uri
});
// image.webPath 将包含一个可用作图片 src 的路径。
// 你可以通过 image.path 访问原始文件,如果需要,可以将其传递给 Filesystem API 来读取图像的原始数据
// (或者将 resultType 设为 CameraResultType.Base64 传递给 getPhoto)
var imageUrl = image.webPath;
// 现在可以将其设置为 image 元素的 src
imageElement.src = imageUrl;
}
示例指南
API
getPhoto(...)
getPhoto(options: CameraOptions) => Promise<CameraPhoto>
提示用户从相册中选择照片,或使用相机拍摄新照片。
| 参数 | 类型 |
|---|---|
options | |
返回值:
Promise<CameraPhoto>
接口
CameraPhoto
| 属性 | 类型 | 描述 |
|---|---|---|
base64String | string | 图像的 base64 编码字符串表示,如果使用 CameraResultType.Base64。 |
dataUrl | string | 以 'data:image/jpeg;base64,' 开头的 URL 和图像的 base64 编码字符串表示,如果使用 CameraResultType.DataUrl。 |
path | string | 如果使用 CameraResultType.Uri,此路径将包含一个完整的、平台特定的文件 URL,稍后可以使用 Filesystem API 读取。 |
webPath | string | webPath 返回一个路径,可用于设置图片的 src 属性,以实现高效的加载和渲染。 |
exif | any | 从图像中检索到的 Exif 数据(如果有 )。 |
format | string | 图像的格式,例如:jpeg、png、gif。iOS 和 Android 仅支持 jpeg。Web 支持 jpeg 和 png。gif 仅在通过文件输入使用时受支持。 |
| ------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
quality | number | 返回 JPEG 格式图像的质量,取值范围为 0-100 |
allowEditing | boolean | 是否允许用户裁剪或进行小幅编辑(具体功能因平台而异) |
resultType | | 数据返回的方式。目前仅支持 'Base64'、'DataUrl' 或 'Uri' |
saveToGallery | boolean | 是否将照片保存到相册。如果照片是从相册中选取的,则仅在编辑后才会保存。默认值:false |
width | number | 保存图像的宽度 |
height | number | 保存图像的高度 |
preserveAspectRatio | boolean | 是否保持图像的宽高比。如果此标志为 true,则宽度和高度将被用作最大值,并且宽高比将保持不变。这仅在同时传入宽度和高度时才相关。当仅提供宽度或高度时,宽高比始终会保持不变(此选项无实际作用)。未来的主要版本将把此行为更改为默认,并且可能会完全移除此选项。默认值:false |
correctOrientation | boolean | 是否自动将图像旋转至"向上"方向以校正纵向模式下的方向。默认值:true |
source | | 获取照片的来源。默认情况下,会提示用户选择相册或拍摄照片。默认值:CameraSource.Prompt |
direction | | 仅限 iOS 和 Web:相机方向。默认值:CameraDirection.Rear |
presentationStyle | "fullscreen" | "popover" | 仅限 iOS:相机的呈现样式。默认为全屏显示。 |
webUseInput | boolean | 仅限 Web:是否使用 PWA 元素体验或文件输入。默认行为是如果安装了 PWA 元素则使用它,否则回退到文件输入。要始终使用文件输入,请将此值设为 true。了解更多关于 PWA 元素的信息:https://capacitorjs.com/docs/pwa-elements |
promptLabelCancel | string | |
promptLabelPhoto | string | |
promptLabelPicture | string |
CameraResultType
| 成员 | 值 |
|---|---|
Uri | "uri" |
Base64 | "base64" |
DataUrl | "dataUrl" |
CameraSource
| 成员 | 值 |
|---|---|
Prompt | "PROMPT" |
Camera | "CAMERA" |
Photos | "PHOTOS" |
CameraDirection
| 成员 | 值 |
|---|---|
Rear | "REAR" |
Front | "FRONT" |