@capacitor/camera
Camera API 提供了使用相机拍摄照片或从相册中选择现有照片的功能。
安装
npm install @capacitor/camera
npx cap sync
iOS
iOS 要求在 Info.plist 中添加并填写以下使用描述:
NSCameraUsageDescription(隐私 - 相机使用描述)NSPhotoLibraryAddUsageDescription(隐私 - 照片库添加使用描述)NSPhotoLibraryUsageDescription(隐私 - 照片库使用描述)
有关在 Xcode 中设置 iOS 权限的更多信息,请阅读 iOS 指南中的配置 Info.plist
Android
当从设备相册中选择现有图片时,现在使用 Android 照片选择器组件。照片选择器在满足以下条件的设备上可用:
- 运行 Android 11(API 级别 30)或更高版本
- 通过 Google 系统更新接收模块化系统组件的更改
运行 Android 11 或 12 且支持 Google Play 服务的旧设备和 Android Go 设备可以安装照片选择器的向后移植版本。要通过 Google Play 服务启用向后移植照片选择器模块的自动安装,请在 AndroidManifest.xml 文件的 <application> 标签中添加以下条目:
<!-- 触发 Google Play 服务安装向后移植的照片选择器模块。 -->
<!--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>
如果未添加该条目,不支持照片选择器的设备将回退到 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 文件中定义):
androidxExifInterfaceVersion:androidx.exifinterface:exifinterface的版本(默认值:1.4.1)androidxMaterialVersion:com.google.android.material:material的版本(默认值:1.13.0)
PWA 注意事项
Camera 插件需要 PWA Elements 才能工作。
示例
import { Camera, CameraResultType } from '@capacitor/camera';
const takePicture = async () => {
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;
// 现在可以设置为图像的 src
imageElement.src = imageUrl;
};
API
getPhoto(...)
getPhoto(options: ImageOptions) => Promise<Photo>
提示用户从相册中选择照片或使用相机拍摄新照片。
| 参数 | 类型 |
|---|---|
options | |
返回值:
Promise<Photo>
自版本: 1.0.0
pickImages(...)
pickImages(options: GalleryImageOptions) => Promise<GalleryPhotos>
允许用户从照片库中选择多张图片。
| 参数 | 类型 |
|---|---|
options | |
返回值:
Promise<GalleryPhotos>
自版本: 1.2.0
pickLimitedLibraryPhotos()
pickLimitedLibraryPhotos() => Promise<GalleryPhotos>
允许用户更新其有限的照片库选择。 在选择器关闭后返回所有有限的照片。 如果用户授予了对照片的完全访问权限,它将返回一个空数组。
Returns:
Promise<GalleryPhotos>
自版本: 4.1.0
getLimitedLibraryPhotos()
getLimitedLibraryPhotos() => Promise<GalleryPhotos>
返回一个从有限的照片库中选择的照片数组。
返回值:
Promise<GalleryPhotos>
自版本: 4.1.0
checkPermissions()
checkPermissions() => Promise<PermissionStatus>
检查相机和相册权限
返回值:
Promise<PermissionStatus>
自版本: 1.0.0
requestPermissions(...)
requestPermissions(permissions?: CameraPluginPermissions | undefined) => Promise<PermissionStatus>
请求相机和相册权限
| 参数 | 类型 |
|---|---|
permissions | |
返回值:
Promise<PermissionStatus>
自版本: 1.0.0
Interfaces
Photo
| 属性 | 类型 | 描述 | 自版本 |
|---|---|---|---|
base64String | string | 图像的 base64 编码字符串表示,如果使用 CameraResultType.Base64。 | 1.0.0 |
dataUrl | string | 以 'data:image/jpeg;base64,' 开头的 URL 和图像的 base64 编码字符串表示,如果使用 CameraResultType.DataUrl。注意:在 Web 上,文件格式可能因浏览器而异。 | 1.0.0 |
path | string |