跳到主要内容
版本:v8

@capacitor/camera

Camera API 提供了使用相机拍照或从相册中选择现有照片的能力。

安装

npm install @capacitor/camera
npx cap sync

iOS

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

  • NSCameraUsageDescription(Privacy - Camera Usage Description)
  • NSPhotoLibraryAddUsageDescription(Privacy - Photo Library Additions Usage Description)
  • NSPhotoLibraryUsageDescription(Privacy - Photo Library Usage Description)

请阅读 iOS 指南 中关于配置 Info.plist 的内容,以获取在 Xcode 中设置 iOS 权限的更多信息。

Android

当从设备图库中选择现有图片时,现在会使用 Android Photo Picker 组件。Photo Picker 适用于满足以下条件的设备:

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

老旧设备和运行 Android 11 或 12 且支持 Google Play 服务的 Android Go 设备,可以安装一个向后移植版本的 photo picker。要启用通过 Google Play 服务自动安装向后移植的 photo picker 模块,请在您的 AndroidManifest.xml 文件的 <application> 标签中添加以下条目:

<!-- 触发 Google Play 服务安装向后移植的 photo picker 模块。 -->
<!--suppress AndroidDomInspection -->
<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>

如果没有添加该条目,在不支持 Photo Picker 的设备上,Photo Picker 组件会回退到使用 Intent.ACTION_OPEN_DOCUMENT

Camera 插件不需要权限,除非使用 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 权限的更多信息。

此外,由于 Camera API 会启动一个单独的 Activity 来处理拍照,您应该在 App 插件中监听 appRestoredResult 事件,以便在您的应用被操作系统终止而 Activity 仍在运行时,处理可能发送回来的相机数据。

变量

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

  • androidxExifInterfaceVersionandroidx.exifinterface:exifinterface 的版本(默认值:1.4.1
  • androidxMaterialVersioncom.google.android.material:material 的版本(默认值:1.13.0

PWA 说明

在 Web 上,takePhoto 可以使用 PWA Elementspwa-camera-modal 自定义元素提供类似原生的相机 UI。如果该元素未注册,插件会回退到使用 <input type="file"> 选择器。chooseFromGallery 在 Web 上始终使用 <input type="file">,无论是否安装了 PWA Elements。

以编程方式安装 PWA Elements

有关完整说明,请参阅 PWA Elements 安装指南

提供自定义相机元素

您也可以注册自己的 pwa-camera-modal 自定义元素,而不是使用 @ionic/pwa-elements。插件通过以下接口与其交互:

成员类型描述
facingModestring 属性在呈现前设置为 'user'(前置摄像头)或 'environment'(后置摄像头)
componentOnReady()方法 → Promise<void>插件在创建元素后调用;当元素准备就绪时 resolve
present()方法由插件调用以显示相机 UI
dismiss()方法由插件调用以在拍照或取消后关闭相机 UI
onPhoto事件当用户拍照或取消时触发。event.detail 必须是 Blob(已拍照)、null(用户取消)或 Error(出现错误)
class MyCameraModal extends HTMLElement {
facingMode = 'environment';

componentOnReady() {
return Promise.resolve();
}

present() {
// 显示您的自定义相机 UI,完成后仅触发一个 'onPhoto' 事件:
// - Blob:用户拍了一张照片
// - null:用户取消了
// - Error:出现了错误
// 示例:
this.dispatchEvent(new CustomEvent('onPhoto', { detail: photoBlob }));
}

dismiss() {
// 隐藏您的自定义相机 UI(插件在收到 'onPhoto' 后调用)
}
}

customElements.define('pwa-camera-modal', MyCameraModal);

示例

拍照

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

const takePicture = async () => {
try {
const result = await Camera.takePhoto({
quality: 90,
includeMetadata: true,
});

// result.webPath 可以直接设置为图片元素的 src
imageElement.src = result.webPath;

// 在原生平台:传递 result.uri 给 Filesystem API 以获取全分辨率 base64 数据,
// 或使用 result.thumbnail 获取较低分辨率的 base64 预览。
// 在 Web 上:result.thumbnail 包含全图 base64 编码数据。

console.log('格式:', result.metadata?.format);
console.log('分辨率:', result.metadata?.resolution);
} catch (e) {
const error = e as any;
// error.code 包含结构化的错误代码(例如 'OS-PLUG-CAMR-0003')
// 当由原生层抛出时。有关所有代码,请参阅 Errors 部分。
const message = error.code ? `[${error.code}] ${error.message}` : error.message;
console.error('takePhoto 失败:', message);
}
};

从相册选择

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

const pickMedia = async () => {
try {
const { results } = await Camera.chooseFromGallery({
mediaType: MediaTypeSelection.All, // 照片、视频或两者
allowMultipleSelection: true,
limit: 5,
includeMetadata: true,
});

for (const item of results) {
console.log('类型:', item.type); // MediaType.Photo 或 MediaType.Video
console.log('webPath:', item.webPath);
console.log('格式:', item.metadata?.format);
console.log('大小:', item.metadata?.size);
}
} catch (e) {
const error = e as any;
const message = error.code ? `[${error.code}] ${error.message}` : error.message;
console.error('chooseFromGallery 失败:', message);
}
};

录制和播放视频

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

const recordAndPlay = async () => {
let videoUri: string | undefined;

try {
const result = await Camera.recordVideo({
saveToGallery: false,
isPersistent: true, // 使文件在应用启动之间保持可用
includeMetadata: true,
});

videoUri = result.uri;
console.log('时长:', result.metadata?.duration);
console.log('已保存到相册:', result.saved);
} catch (e) {
const error = e as any;
const message = error.code ? `[${error.code}] ${error.message}` : error.message;
console.error('recordVideo 失败:', message);
return;
}

if (videoUri) {
try {
await Camera.playVideo({ uri: videoUri });
} catch (e) {
const error = e as any;
const message = error.code ? `[${error.code}] ${error.message}` : error.message;
console.error('playVideo 失败:', message);
}
}
};

从 base64 字符串编辑照片

editPhoto 从 base64 编码的图像打开一个应用内编辑器,并将编辑后的图像作为 base64 字符串在 outputImage 中返回。

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

const editFromBase64 = async (base64Image: string) => {
try {
const { outputImage } = await Camera.editPhoto({
inputImage: base64Image, // 原始 base64,不含 data URL 前缀
});

// outputImage 是编辑后的图像,base64 编码
imageElement.src = `data:image/jpeg;base64,${outputImage}`;
} catch (e) {
const error = e as any;
const message = error.code ? `[${error.code}] ${error.message}` : error.message;
console.error('editPhoto 失败:', message);
}
};

从 URI 编辑照片

editURIPhoto 从文件 URI(例如来自 takePhoto 或 Filesystem API)打开一个应用内编辑器,并返回一个 MediaResult

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

const editFromURI = async (uri: string) => {
try {
const result = await Camera.editURIPhoto({
uri,
saveToGallery: false,
includeMetadata: true,
});

// result.webPath 可以直接用作图片的 src
imageElement.src = result.webPath;

console.log('格式:', result.metadata?.format);
console.log('大小:', result.metadata?.size);
console.log('已保存到相册:', result.saved);
} catch (e) {
const error = e as any;
const message = error.code ? `[${error.code}] ${error.message}` : error.message;
console.error('editURIPhoto 失败:', message);
}
};

迁移到新 API

版本 8.1.0 引入了新的改进 API,并弃用了 getPhotopickImages

替换 getPhoto

getPhoto 通过 CameraSource 处理三种来源:CameraPhotosPromptCameraPhotos 现在映射到不同的方法,而 Prompt 已被移除。

CameraSource.Camera 替换为 takePhoto

新 API 不再支持 CameraResultType.Base64CameraResultType.DataUrl。请参阅结果类型变更了解替代方案。

// 之前
const photo = await Camera.getPhoto({
source: CameraSource.Camera,
quality: 90,
allowEditing: true,
resultType: CameraResultType.Uri,
direction: CameraDirection.Rear,
width: 1280,
height: 720,
});
const imageUrl = photo.webPath;

// 之后
const result = await Camera.takePhoto({
quality: 90,
editable: 'in-app', // 替换 allowEditing: true
cameraDirection: CameraDirection.Rear, // 替换 direction
targetWidth: 1280, // 替换 width (1)
targetHeight: 720, // 替换 height (1)
});
const imageUrl = result.webPath;

(1) width/height 各自独立工作,设置最大尺寸的同时保持宽高比。targetWidth/targetHeight 必须一起使用——仅设置其中一个无效。

CameraSource.Photos 替换为 chooseFromGallery

// 之前
const photo = await Camera.getPhoto({
source: CameraSource.Photos,
quality: 90,
resultType: CameraResultType.Uri,
});
const imageUrl = photo.webPath;

// 之后
const { results } = await Camera.chooseFromGallery({
quality: 90,
});
const imageUrl = results[0].webPath;

CameraSource.Prompt(或默认值)

getPhoto 之前会显示一个原生提示,让用户选择相机或相册。此提示不再是插件的一部分。您应该使用自己的 UI(例如使用 @capacitor/action-sheet)构建提示,然后根据用户选择调用 takePhotochooseFromGallery

// 之前
const photo = await Camera.getPhoto({
// source 默认为 CameraSource.Prompt
quality: 90,
resultType: CameraResultType.Uri,
});

// 之后:显示您自己的 UI 来确定来源,然后调用相应的方法
const result = await Camera.takePhoto({ quality: 90 });
// 或
const { results } = await Camera.chooseFromGallery({ quality: 90 });

结果类型变更

getPhoto 返回一个 Photo 对象,其可用字段取决于 resultType。新 API 完全移除了 resultType——MediaResult 具有固定的字段集,无论照片是如何拍摄的。

Photo 字段MediaResult 对应项
pathuri
webPathwebPath
base64Stringthumbnail(在 Web 上,包含全图 base64 编码;在原生平台,包含缩略图)
dataUrl无直接对应项——请参阅下面的说明
savedsaved
formatmetadata.format(需要 includeMetadata: true
exifmetadata.exif(需要 includeMetadata: true

构建 data URL——根据您的需求有两种选择:

在所有平台上,您可以组合使用 thumbnailmetadata.format(需要 includeMetadata: true)。在原生平台,thumbnail 是较低分辨率的:

const dataUrl = `data:image/${result.metadata.format};base64,${result.thumbnail}`;

在原生平台,如果您需要全分辨率 base64 数据,请通过 Filesystem API 读取 uri,然后从中构建 data URL:

import { Filesystem } from '@capacitor/filesystem';

const { data } = await Filesystem.readFile({ path: result.uri });
const dataUrl = `data:image/${result.metadata.format};base64,${data}`;

替换 pickImageschooseFromGallery

pickImages 允许从相册中选择多张照片。在 chooseFromGallery 中传递 allowMultipleSelection: true 以获得相同的行为。

// 之前
const { photos } = await Camera.pickImages({
quality: 90,
limit: 5,
width: 1280,
height: 720,
});
for (const photo of photos) {
console.log(photo.webPath);
}

// 之后
const { results } = await Camera.chooseFromGallery({
allowMultipleSelection: true,
quality: 90,
limit: 5,
targetWidth: 1280, // 替换 width (1)
targetHeight: 720, // 替换 height (1)
});
for (const result of results) {
console.log(result.webPath);
}

(1) width/height 各自独立工作,设置最大尺寸的同时保持宽高比。targetWidth/targetHeight 必须一起使用——仅设置其中一个无效。

chooseFromGallery 还可以通过设置 mediaTypeMediaTypeSelection.VideoMediaTypeSelection.All 来选择视频或混合媒体。

选项重命名摘要

旧选项新选项适用范围
widthtargetWidth (1)takePhoto, chooseFromGallery
heighttargetHeight (1)takePhoto, chooseFromGallery
directioncameraDirectiontakePhoto
allowEditingeditable: 'in-app'takePhoto, chooseFromGallery
resultType—(已移除,请参阅结果类型变更
source—(已移除,请使用单独的方法)
promptLabel*—(已移除,请构建自己的 UI)

(1) width/height 各自独立工作,设置最大尺寸的同时保持宽高比。targetWidth/targetHeight 必须一起使用——仅设置其中一个无效。

API

有关现有错误代码的列表,请参阅 错误

takePhoto(...)

takePhoto(options: TakePhotoOptions) => Promise<MediaResult>

打开设备相机,允许用户拍照。

参数类型
options
TakePhotoOptions

返回:

Promise<MediaResult>

Since: 8.1.0


recordVideo(...)

recordVideo(options: RecordVideoOptions) => Promise<MediaResult>

打开设备相机,允许用户录制视频。 在 Web 上不可用。

参数类型
options
RecordVideoOptions

返回:

Promise<MediaResult>

Since: 8.1.0


playVideo(...)

playVideo(options: PlayVideoOptions) => Promise<void>

打开原生视频播放器。 在 Web 上不可用。

参数类型
options
PlayVideoOptions

Since: 8.1.0


chooseFromGallery(...)

chooseFromGallery(options: ChooseFromGalleryOptions) => Promise<MediaResults>

允许用户直接从他们的相册中选择图片、视频或两者。

参数类型
options
ChooseFromGalleryOptions

返回:

Promise<MediaResults>

Since: 8.1.0


editPhoto(...)

editPhoto(options: EditPhotoOptions) => Promise<EditPhotoResult>

打开一个应用内编辑界面,使用提供的 base64 字符串编辑给定照片。 在 Web 上不可用。

参数类型
options
EditPhotoOptions

返回:

Promise<EditPhotoResult>

Since: 8.1.0


editURIPhoto(...)

editURIPhoto(options: EditURIPhotoOptions) => Promise<MediaResult>

打开一个应用内编辑界面,使用提供的 URI 编辑照片。 在 Web 上不可用。

参数类型
options
EditURIPhotoOptions

返回:

Promise<MediaResult>

Since: 8.1.0


pickLimitedLibraryPhotos()

pickLimitedLibraryPhotos() => Promise<GalleryPhotos>

允许用户更新其受限的照片库选择。 在选取器关闭后返回所有受限照片。 如果用户授予了照片的完整访问权限,则返回空数组。

返回:

Promise<GalleryPhotos>

Since: 4.1.0


getLimitedLibraryPhotos()

getLimitedLibraryPhotos() => Promise<GalleryPhotos>

返回从受限照片库中选择的照片数组。

返回:

Promise<GalleryPhotos>

Since: 4.1.0


checkPermissions()

checkPermissions() => Promise<PermissionStatus>

检查相机和相册权限。

返回:

Promise<PermissionStatus>

Since: 1.0.0


requestPermissions(...)

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

请求相机和相册权限。

参数类型
permissions
CameraPluginPermissions

返回:

Promise<PermissionStatus>

Since: 1.0.0


getPhoto(...)

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

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

参数类型
options
ImageOptions

返回:

Promise<Photo>

Since: 1.0.0


pickImages(...)

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

允许用户从相册中选择多张图片。

参数类型
options
GalleryImageOptions

返回:

Promise<GalleryPhotos>

Since: 1.2.0


接口

MediaResult

属性类型描述Since
type
MediaType
媒体结果的类型。可以是 PhotoVideo8.1.0
uristring指向媒体文件的 URI。在 Web 上不可用。请在 Web 上改用 webPath8.1.0
thumbnailstring返回媒体的缩略图,base64 编码。在 Web 上,对于 MediaType.Photo,完整图像会以 base64 编码返回。在 Web 上,对于 MediaType.Video,会返回从视频中捕获的全分辨率 JPEG 帧,以 80% 质量进行 base64 编码。8.1.0
savedboolean媒体是否成功保存到相册。仅在输入选项中 saveToGallery 设置为 true 时适用。否则,save 始终返回 false。在 Web 上不可用。8.1.0
webPathstringwebPath 返回一个可用于设置媒体项 src 属性的路径,以实现高效的加载和渲染。8.1.0
metadata
MediaMetadata
与媒体结果关联的元数据。仅在输入选项中 includeMetadata 设置为 true 时包含。8.1.0

MediaMetadata

属性类型描述Since
sizenumber媒体文件大小,以字节为单位。8.1.0
durationnumber仅适用于 MediaType.Video——媒体的时长,以秒为单位。8.1.0
formatstring图像的格式,例如:jpeg, png, mp4。Android 和 iOS 可能返回 'jpg' 而不是 'jpeg'。格式是相同的,只是名称不同。在检查返回的媒体格式是否为 JPEG 时,请同时对比 'jpeg' 和 'jpg'。Web 支持 jpeg、png 和 gif,但具体可用性可能因浏览器而异。gif 仅在 Web 的 chooseFromGallery 中支持。8.1.0
resolutionstring媒体的分辨率,格式为 &lt;width&gt;x&lt;height&gt;。例如:'1920x1080'。8.1.0
creationDatestring媒体创建的日期和时间,采用 ISO 8601 格式。如果创建日期不可用(例如 Android 7 及以下版本),则返回最后修改日期。对于 Web,始终返回最后修改日期。8.1.0
exifstring从媒体项中检索到的 Exif 数据(如果有)。仅适用于 MediaType.Photo。在 Web 上不可用。8.1.0

TakePhotoOptions

属性类型描述默认值Since
qualitynumber返回图像的质量,范围 0-100。仅适用于 EncodingType.JPEG。注意:此选项仅在 Android 和 iOS 上支持。1008.1.0
targetWidthnumber要应用的照片目标宽度。必须为正数,并与 targetHeight 一起使用。注意:此选项仅在 Android 和 iOS 上支持。8.1.0
targetHeightnumber要应用的照片目标高度。必须为正数,并与 targetWidth 一起使用。注意:此选项仅在 Android 和 iOS 上支持。8.1.0
correctOrientationboolean是否自动旋转图像"向上"以校正竖屏模式下的方向。注意:此选项仅在 Android 和 iOS 上支持。true8.1.0
encodingType
EncodingType
拍摄照片的编码类型——JPEG 或 PNG。注意:此选项仅在 Android 和 iOS 上支持。EncodingType.JPEG8.1.0
saveToGalleryboolean是否将照片保存到相册。注意:此选项仅在 Android 和 iOS 上支持。false8.1.0
cameraDirection
CameraDirection
仅 iOS 和 Web:相机方向。CameraDirection.Rear8.1.0
editable'in-app' | 'external' | 'no'确定用户是否可以以及如何编辑照片。- 'in-app':使用应用内编辑器进行照片编辑。- 'external':打开单独的(平台特定的)原生应用来处理照片编辑,如果没有可用的原生应用,则回退到应用内编辑器。注意:iOS 不支持外部编辑,将使用 'in-app'。- 'no':不允许编辑。在 Web 上不可用。'no'8.1.0
presentationStyle'fullscreen' | 'popover'仅 iOS:相机的呈现样式。'fullscreen'8.1.0
webUseInputboolean仅 Web:是否使用 PWA Element 体验或文件输入。默认情况下,如果安装了 PWA Elements 则使用,否则回退到文件输入。要始终使用文件输入,请将其设置为 true。了解更多关于 PWA Elements:https://capacitorjs.com/docs/web/pwa-elements8.1.0
includeMetadatabooleanMediaResult 是否应包含其元数据。如果在获取元数据时发生错误,将返回空值。false8.1.0

RecordVideoOptions

属性类型描述默认值Since
saveToGalleryboolean是否将视频保存到相册。false8.1.0
includeMetadatabooleanMediaResult 是否应包含其元数据。如果在获取元数据时发生错误,将返回空值。false8.1.0
isPersistentboolean是否将视频存储在持久化应用存储中或临时缓存中。如果您计划在应用启动之间使用返回的 MediaResult#URI,您可能希望将其设置为 true。否则,可以设置为 false。true8.1.0

PlayVideoOptions

属性类型描述Since
uristring要播放的视频的 URI。您可以直接使用 recordVideochooseFromGallery 返回的 MediaResult#URI8.1.0

MediaResults

属性类型描述Since
resultsMediaResult[]媒体结果列表。8.1.0

ChooseFromGalleryOptions

属性类型描述默认值Since
mediaType
MediaTypeSelection
要选择的媒体类型。可以是图片、视频或两者。MediaTypeSelection.Photo8.1.0
allowMultipleSelectionboolean是否允许从相册中选择多个媒体文件。false8.1.0
limitnumber用户可以选择的最大媒体文件数量。仅在 allowMultipleSelectiontrue 时适用。任何非正数将被视为无限制。注意:此选项仅在 Android 13+ 和 iOS 上支持。08.1.0
includeMetadatabooleanMediaResult 是否应包含其元数据。如果在获取元数据时发生错误,将返回空值。false8.1.0
editable'in-app' | 'external' | 'no'确定用户是否可以以及如何编辑照片。- 'in-app':使用应用内编辑器进行照片编辑。- 'external':打开单独的(平台特定的)原生应用来处理照片编辑,如果没有可用的原生应用,则回退到应用内编辑器。注意:iOS 不支持外部编辑,将使用 'in-app'。- 'no':不允许编辑。仅适用于 MediaTypeSelection.PhotoallowMultipleSelection 设置为 false。在 Web 上不可用。'no'8.1.0
presentationStyle'fullscreen' | 'popover'仅 iOS:媒体选择器的呈现样式。'fullscreen'8.1.0
qualitynumber返回图像的质量,范围 0-100。仅适用于 MediaType.Photo 和 JPEG 格式。注意:此选项仅在 Android 和 iOS 上支持。1008.1.0
targetWidthnumber要应用的照片目标宽度。必须为正数,并与 targetHeight 一起使用。选择视频时不适用。注意:此选项仅在 Android 和 iOS 上支持。1.0.0
targetHeightnumber要应用的照片目标高度。必须为正数,并与 targetWidth 一起使用。选择视频时不适用。注意:此选项仅在 Android 和 iOS 上支持。8.1.0
correctOrientationboolean是否自动旋转图像"向上"以校正竖屏模式下的方向。选择视频时不适用。注意:此选项仅在 Android 和 iOS 上支持。true8.1.0
webUseInputboolean仅 Web:是否使用 PWA Element 体验或文件输入。默认情况下,如果安装了 PWA Elements 则使用,否则回退到文件输入。要始终使用文件输入,请将其设置为 true。了解更多关于 PWA Elements:https://capacitorjs.com/docs/web/pwa-elements8.1.0

EditPhotoResult

属性类型描述Since
outputImagestring编辑后的图像,base64 编码。8.1.0

EditPhotoOptions

属性类型描述Since
inputImagestring要编辑的 base64 编码图像。8.1.0

EditURIPhotoOptions

属性类型描述默认值Since
uristring包含要编辑的照片的 URI。8.1.0
saveToGalleryboolean是否将编辑后的照片保存到相册。false8.1.0
includeMetadatabooleanMediaResult 是否应包含其元数据。如果在获取元数据时发生错误,将返回空值。false8.1.0

GalleryPhotos

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

GalleryPhoto

属性类型描述Since
pathstring完整的、特定于平台的文件 URL,之后可以使用 Filesystem API 读取。1.2.0
webPathstringwebPath 返回一个可用于设置图像 src 属性的路径,以实现高效的加载和渲染。1.2.0
exifany从图像中检索到的 Exif 数据(如果有)。1.2.0
formatstring图像的格式,例如:jpeg, png, gif。iOS 和 Android 仅支持 jpeg。Web 支持 jpeg、png 和 gif。1.2.0

PermissionStatus

属性类型
camera
CameraPermissionState
photos
CameraPermissionState

CameraPluginPermissions

属性类型
permissionsCameraPermissionType[]

Photo

属性类型描述Since
base64Stringstring图像的 base64 编码字符串表示,如果使用了 CameraResultType.Base641.0.0
dataUrlstring以 'data:image/jpeg;base64,' 开头的 URL 加上图像的 base64 编码字符串表示,如果使用了 CameraResultType.DataUrl。注意:在 Web 上,文件格式可能因浏览器而异。1.0.0
pathstring如果使用了 CameraResultType.Uri,路径将包含完整的、特定于平台的文件 URL,之后可以使用 Filesystem API 读取。1.0.0
webPathstringwebPath 返回一个可用于设置图像 src 属性的路径,以实现高效的加载和渲染。1.0.0
exifany从图像中检索到的 Exif 数据(如果有)。1.0.0
formatstring图像的格式,例如:jpeg, png, gif。iOS 和 Android 仅支持 jpeg。Web 支持 jpeg、png 和 gif,但具体可用性可能因浏览器而异。gif 仅在 webUseInput 设置为 truesource 设置为 Photos 时支持。1.0.0
savedboolean图像是否已保存到相册。在 Android 和 iOS 上,如果用户未授予所需权限,保存到相册可能会失败。在 Web 上没有相册,因此始终返回 false。1.1.0

ImageOptions

属性类型描述默认值Since
qualitynumber以 JPEG 格式返回图像的质量,范围 0-100。注意:此选项仅在 Android 和 iOS 上支持。1.0.0
allowEditingboolean是否允许用户裁剪或进行小幅编辑(平台特定)。注意:此选项仅在 Android 和 iOS 上支持。在 iOS 上仅支持 CameraSource.Camera,但不支持 CameraSource.Photos1.0.0
resultType
CameraResultType
数据的返回方式。目前仅支持 'Base64'、'DataUrl' 或 'Uri'。1.0.0
saveToGalleryboolean是否将照片保存到相册。如果是从相册选择的照片,则仅在编辑后保存。注意:此选项仅在 Android 和 iOS 上支持。false1.0.0
widthnumber保存图像所需的最大宽度。保持宽高比。注意:此选项仅在 Android 和 iOS 上支持。1.0.0
heightnumber保存图像所需的最大高度。保持宽高比。注意:此选项仅在 Android 和 iOS 上支持。1.0.0
correctOrientationboolean是否自动旋转图像"向上"以校正竖屏模式下的方向。注意:此选项仅在 Android 和 iOS 上支持。true1.0.0
source
CameraSource
获取照片的来源。默认情况下,会提示用户选择相册或拍照。CameraSource.Prompt1.0.0
direction
CameraDirection
仅 iOS 和 Web:相机方向。CameraDirection.Rear1.0.0
presentationStyle'fullscreen' | 'popover'仅 iOS:相机的呈现样式。'fullscreen'1.0.0
webUseInputboolean仅 Web:是否使用 PWA Element 体验或文件输入。默认情况下,如果安装了 PWA Elements 则使用,否则回退到文件输入。要始终使用文件输入,请将其设置为 true。了解更多关于 PWA Elements:https://capacitorjs.com/docs/web/pwa-elements1.0.0
promptLabelHeaderstring显示提示时使用的文本值。'Photo'1.0.0
promptLabelCancelstring显示提示时使用的文本值。仅 iOS:'取消'按钮的标签。'Cancel'1.0.0
promptLabelPhotostring显示提示时使用的文本值。用于选择已保存图像的按钮标签。'From Photos'1.0.0
promptLabelPicturestring显示提示时使用的文本值。用于打开相机的按钮标签。'Take Picture'1.0.0

GalleryImageOptions

属性类型描述默认值Since
qualitynumber以 JPEG 格式返回图像的质量,范围 0-100。注意:此选项仅在 Android 和 iOS 上支持。1.2.0
widthnumber保存图像所需的最大宽度。保持宽高比。1.2.0
heightnumber保存图像所需的最大高度。保持宽高比。1.2.0
correctOrientationboolean是否自动旋转图像"向上"以校正竖屏模式下的方向。true1.2.0
presentationStyle'fullscreen' | 'popover'仅 iOS:相机的呈现样式。'fullscreen'1.2.0
limitnumber用户可以选择的最大图片数量。注意:此选项仅在 Android 13+ 和 iOS 上支持。0 (无限制)1.2.0

类型别名

CameraPermissionState

PermissionState | 'limited'

PermissionState

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

CameraPermissionType

'camera' | 'photos'

枚举

MediaType

成员
Photo0
Video1

EncodingType

成员
JPEG0
PNG1

CameraDirection

成员
Rear'REAR'
Front'FRONT'

MediaTypeSelection

成员
Photo0
Video1
All2

CameraResultType

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

CameraSource

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

错误

该插件在 Android 和 iOS 上返回结构化错误。每个错误都有一个 code(例如 OS-PLUG-CAMR-0003)和一个带有可读描述信息的 message。请注意,这些仅适用于从版本 8.1.0 开始引入的新 API 的原生平台:takePhotochooseFromGalleryeditPhotoeditURIPhotorecordVideoplayVideo

错误代码平台描述
OS-PLUG-CAMR-0003Android, iOS无法访问相机。请检查您的相机权限并重试。
OS-PLUG-CAMR-0005Android, iOS无法访问您的相册,因为未提供访问权限。
OS-PLUG-CAMR-0006Android, iOS无法拍照,因为进程被取消。
OS-PLUG-CAMR-0007Android, iOS没有可用的相机。
OS-PLUG-CAMR-0008iOS所选文件包含无效数据。
OS-PLUG-CAMR-0009Android, iOS无法编辑图像。
OS-PLUG-CAMR-0010Android, iOS无法拍照。
OS-PLUG-CAMR-0011iOS无法从相册获取图像。
OS-PLUG-CAMR-0012Android, iOS无法处理图像。
OS-PLUG-CAMR-0013Android, iOS无法编辑照片,因为进程被取消。
OS-PLUG-CAMR-0014iOS无法解码'拍照'操作参数。
OS-PLUG-CAMR-0016Android, iOS无法录制视频。
OS-PLUG-CAMR-0017Android, iOS无法录制视频,因为进程被取消。
OS-PLUG-CAMR-0018Android, iOS无法从相册选择媒体。
OS-PLUG-CAMR-0019iOS无法编码媒体结果。
OS-PLUG-CAMR-0020Android, iOS无法从相册选择媒体,因为进程被取消。
OS-PLUG-CAMR-0021Android无法获取媒体文件路径。
OS-PLUG-CAMR-0023Android, iOS无法播放视频。
OS-PLUG-CAMR-0024AndroidURI 参数不能为空。
OS-PLUG-CAMR-0025iOS无法从相册获取视频。
OS-PLUG-CAMR-0026iOS插件存在问题。
OS-PLUG-CAMR-0027Android, iOS所选文件不存在。
OS-PLUG-CAMR-0028Android, iOS无法从 URI 检索图像。
OS-PLUG-CAMR-0031Android向插件方法提供了无效参数。
OS-PLUG-CAMR-0033Android无法获取上下文。