跳到主要内容
版本:v8

@capacitor/camera

相机 API 提供了使用相机拍摄照片或从照片库中选择现有照片的功能。

安装

npm install @capacitor/camera
npx cap sync

iOS

iOS 要求您在 Info.plist 中为您的应用程序添加以下使用描述并填写。

  • NSCameraUsageDescription (隐私 - 相机使用描述)
  • NSPhotoLibraryAddUsageDescription (隐私 - 照片库添加使用描述)
  • NSPhotoLibraryUsageDescription (隐私 - 照片库使用描述)

阅读有关 配置 Info.plist 的内容,在 iOS 指南 中了解有关在 Xcode 中设置 iOS 权限的更多信息。

Android

从设备图库中选择现有图像时,现在将使用 Android 照片选择器组件。照片选择器适用于满足以下条件的设备

  • 运行 Android 11(API 级别 30)或更高版本
  • 通过 Google 系统更新接收模块化系统组件的更改

运行 Android 11 或 12 并支持 Google Play 服务的旧设备和 Android Go 设备可以安装照片选择器的移植版本。要通过 Google Play 服务启用照片选择器模块的自动安装移植版本,请在 AndroidManifest.xml 文件中将以下条目添加到 <application> 标签中



<service android:name="com.google.android.gms.metadata.ModuleDependencies"
android:enabled="false"
android:exported="false"
tools:ignore="MissingClass">
<intent-filter>
<action android:name="com.google.android.gms.metadata.MODULE_DEPENDENCIES" />
</intent-filter>
<meta-data android:name="photopicker_activity:0:required" android:value="" />
</service>

如果未添加该条目,则不支持照片选择器的设备将使用 Intent.ACTION_OPEN_DOCUMENT 作为照片选择器组件的回退选项。

相机插件不需要任何权限,除非使用 saveToGallery: true,在这种情况下,应将以下权限添加到您的 AndroidManifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

您也可以仅为将请求权限的 Android 版本指定这些权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29"/>

存储权限用于读取/保存照片文件。

阅读有关 设置权限 的内容,在 Android 指南 中了解有关设置 Android 权限的更多信息。

此外,由于相机 API 会启动一个单独的 Activity 来处理拍照,因此您应在 App 插件中监听 appRestoredResult 以处理在 Activity 运行期间操作系统终止应用程序的情况下发送的任何相机数据。

变量

此插件将使用以下项目变量(在您应用程序的 variables.gradle 文件中定义)

  • androidxExifInterfaceVersionandroidx.exifinterface:exifinterface 的版本(默认:1.3.6
  • androidxMaterialVersioncom.google.android.material:material 的版本(默认:1.10.0

PWA 说明

PWA 元素 是相机插件正常工作的必要条件。

示例

import { Camera, CameraResultType } from '@capacitor/camera';

const takePicture = async () => {
const image = await Camera.getPhoto({
quality: 90,
allowEditing: true,
resultType: CameraResultType.Uri
});

// image.webPath will contain a path that can be set as an image src.
// You can access the original file using image.path, which can be
// passed to the Filesystem API to read the raw data of the image,
// if desired (or pass resultType: CameraResultType.Base64 to getPhoto)
var imageUrl = image.webPath;

// Can be set to the src of an image now
imageElement.src = imageUrl;
};

API

getPhoto(...)

getPhoto(options: ImageOptions) => Promise<Photo>

提示用户从相册中选择照片,或使用相机拍摄新照片。

参数类型
optionsImageOptions

返回: Promise<Photo>

1.0.0


pickImages(...)

pickImages(options: GalleryImageOptions) => Promise<GalleryPhotos>

允许用户从照片库中选择多张图片。在 iOS 13 及更早版本上,它只允许选择一张图片。

参数类型
optionsGalleryImageOptions

返回: Promise<GalleryPhotos>

1.2.0


pickLimitedLibraryPhotos()

pickLimitedLibraryPhotos() => Promise<GalleryPhotos>

仅限 iOS 14 及更高版本:允许用户更新其有限照片库选择。在 iOS 15 及更高版本上,在选择器关闭后返回所有有限照片。在 iOS 14 或用户授予对照片的完全访问权限的情况下,它将返回一个空数组。

返回: Promise<GalleryPhotos>

4.1.0


getLimitedLibraryPhotos()

getLimitedLibraryPhotos() => Promise<GalleryPhotos>

仅限 iOS 14 及更高版本:返回从有限照片库中选择的照片数组。

返回: Promise<GalleryPhotos>

4.1.0


checkPermissions()

checkPermissions() => Promise<PermissionStatus>

检查相机和照片库权限

返回: Promise<PermissionStatus>

1.0.0


requestPermissions(...)

requestPermissions(permissions?: CameraPluginPermissions | undefined) => Promise<PermissionStatus>

请求相机和照片库权限

参数类型
permissionsCameraPluginPermissions

返回: Promise<PermissionStatus>

1.0.0


接口

Photo

属性类型描述
base64String字符串图像的 base64 编码字符串表示形式,如果使用 CameraResultType.Base641.0.0
dataUrl字符串以 'data:image/jpeg;base64,' 开头的 URL,以及图像的 base64 编码字符串表示形式,如果使用 CameraResultType.DataUrl。注意:在 Web 上,文件格式可能会根据浏览器而有所不同。1.0.0
path字符串如果使用 CameraResultType.Uri,则路径将包含一个完整的、特定于平台的文件 URL,可以使用文件系统 API 稍后读取。1.0.0
webPath字符串webPath 返回一个路径,该路径可用于设置图像的 src 属性,以实现高效的加载和渲染。1.0.0
exif任何从图像中检索到的 Exif 数据(如果有)。1.0.0
format字符串图像的格式,例如:jpeg、png、gif。iOS 和 Android 只支持 jpeg。Web 支持 jpeg、png 和 gif,但具体可用性可能会根据浏览器而有所不同。gif 仅在将 webUseInput 设置为 true 或将 source 设置为 Photos 时支持。1.0.0
saved布尔值图像是否已保存到图库。如果图像是从图库中选择的,则只有在编辑后才会保存。在 Web 上没有图库,因此始终返回 false。1.1.0

ImageOptions

属性类型描述默认
quality数字以 JPEG 格式返回的图像质量,范围为 0-100 注意:此选项仅在 Android 和 iOS 上支持1.0.0
allowEditing布尔值是否允许用户裁剪或进行小的编辑(特定于平台)。在 iOS 14 及更高版本上,它仅支持 CameraSource.Camera,但不支持 CameraSource.Photos1.0.0
resultTypeCameraResultType数据应如何返回。当前,仅支持 'Base64'、'DataUrl' 或 'Uri'1.0.0
saveToGallery布尔值是否将照片保存到图库。如果照片是从图库中选择的,则只有在编辑后才会保存。: false1.0.0
width数字保存图像的所需最大宽度。纵横比得到保留。1.0.0
height数字保存图像的所需最大高度。纵横比得到保留。1.0.0
correctOrientation布尔值是否自动将图像“向上”旋转以校正纵向模式下的方向: true1.0.0
sourceCameraSource获取照片的来源。默认情况下,这会提示用户选择照片库或拍摄照片。: CameraSource.Prompt1.0.0
directionCameraDirection仅限 iOS 和 Web:摄像头的方向。: CameraDirection.Rear1.0.0
presentationStyle'fullscreen' | 'popover'仅限 iOS:相机的显示样式。: 'fullscreen'1.0.0
webUseInput布尔值仅限 Web:是否使用 PWA 元素体验或文件输入。默认情况下,如果已安装,则使用 PWA 元素,然后回退到文件输入。要始终使用文件输入,请将此设置为 true。了解有关 PWA 元素的更多信息:https://capacitorjs.com/docs/web/pwa-elements1.0.0
promptLabelHeader字符串显示提示时要使用的文本值。: '照片'1.0.0
promptLabelCancel字符串显示提示时要使用的文本值。仅限 iOS:'取消' 按钮的标签。: '取消'1.0.0
promptLabelPhoto字符串显示提示时要使用的文本值。选择已保存图像的按钮的标签。: '从照片'1.0.0
promptLabelPicture字符串显示提示时要使用的文本值。打开相机的按钮的标签。: '拍照'1.0.0

GalleryPhotos

属性类型描述
photosGalleryPhoto[]所有选定照片的数组。1.2.0

GalleryPhoto

属性类型描述
path字符串完整的、特定于平台的文件 URL,可以使用文件系统 API 稍后读取。1.2.0
webPath字符串webPath 返回一个路径,该路径可用于设置图像的 src 属性,以实现高效的加载和渲染。1.2.0
exif任何从图像中检索到的 Exif 数据(如果有)。1.2.0
format字符串图像格式,例如:jpeg、png、gif。iOS 和 Android 仅支持 jpeg。Web 支持 jpeg、png 和 gif。1.2.0

GalleryImageOptions

属性类型描述默认
quality数字返回的 JPEG 图像质量,范围为 0-100。注意:此选项仅在 Android 和 iOS 上受支持。1.2.0
width数字保存图像的所需最大宽度。纵横比得到保留。1.2.0
height数字保存图像的所需最大高度。纵横比得到保留。1.2.0
correctOrientation布尔值是否自动将图像“向上”旋转以校正纵向模式下的方向: true1.2.0
presentationStyle'fullscreen' | 'popover'仅限 iOS:相机的显示样式。: 'fullscreen'1.2.0
limit数字用户可以选择的照片最大数量。注意:此选项仅在 Android 13+ 和 iOS 上受支持。0(无限制)1.2.0

PermissionStatus

CameraPluginPermissions

属性类型
permissionsCameraPermissionType[]

类型别名

CameraPermissionState

PermissionState | 'limited'

PermissionState

'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'

CameraPermissionType

'camera' | 'photos'

枚举

CameraResultType

成员
Uri'uri'
Base64'base64'
DataUrl'dataUrl'

CameraSource

成员描述
提示'PROMPT'提示用户选择照片相册或拍摄照片。
相机'CAMERA'使用相机拍摄新照片。
照片'PHOTOS'从图库或照片相册中选择现有照片。

CameraDirection

成员
后置'REAR'
前置'FRONT'