@capacitor-community/camera-preview

中文文档
8.0.2发布于 2026/09/25MITTypeScriptESM + CJS零依赖近 30 天下载 12.5万

Camera preview

原始使用文档
文档目录17 节
  1. Capacitor Camera Preview
  2. Extra Android installation steps
  3. Variables
  4. Extra iOS installation steps
  5. Extra Web installation steps
  6. start(options)
  7. stop()
  8. flip()
  9. capture(options)
  10. captureSample(options)
  11. getSupportedFlashModes()
  12. setFlashMode(options)
  13. startRecordVideo(options) ---- ANDROID and iOS only
  14. stopRecordVideo() ---- ANDROID and iOS only
  15. setOpacity(options: CameraOpacityOptions): Promise<{}>; ---…
  16. isCameraStarted() ---- ANDROID and iOS only
  17. FLASH_MODE


Capacitor Camera Preview

@capacitor-community/camera-preview


CAPACITOR 8


Capacitor plugin that allows camera interaction from Javascript and HTML
(based on cordova-plugin-camera-preview).


Version 8 of this plugin requires Capacitor 8.

If you are using Capacitor 7, use version 7.0.5

If you are using Capacitor 6, use version 6.0.1

If you are using Capacitor 5, use version 5

If you are using Capacitor 4, use version 4

If you are using Capacitor 3, use version 3

If you are using Capacitor 2, use version 1

PR's are greatly appreciated.

-- @arielhernandezmusa and @pbowyer, current maintainers

Installation

yarn add @capacitor-community/camera-preview

or

npm install @capacitor-community/camera-preview

Then run

npx cap sync

Extra Android installation steps

Important camera-preview 3+ requires Gradle 7. If you are using Gradle 4, please use version 2 of this plugin.

Open android/app/src/main/AndroidManifest.xml and above the closing </manifest> tag add this line to request the CAMERA permission:

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

For more help consult the Capacitor docs.

Variables

This plugin will use the following project variables (defined in your app's variables.gradle file):

  • androidxExifInterfaceVersion: version of androidx.exifinterface:exifinterface (default: 1.4.2)

Extra iOS installation steps

You will need to add two permissions to Info.plist. Follow the Capacitor docs and add permissions with the raw keys NSCameraUsageDescription and NSMicrophoneUsageDescription. NSMicrophoneUsageDescription is only required, if audio will be used. Otherwise set the disableAudio option to true, which also disables the microphone permission request.

Extra Web installation steps

Add import { CameraPreview } from '@capacitor-community/camera-preview'; in the file where you want to use the plugin.

then in html add <div id="cameraPreview"></div>

and CameraPreview.start({ parent: "cameraPreview"}); will work.

Methods

start(options)

Starts the camera preview instance.

Android: the returned promise resolves only after the native preview has delivered its first frame and is ready for capture. It rejects if the camera or preview cannot be started, or if no first frame arrives within 10 seconds. Calling start() while the camera is already running or starting also rejects.


Optionvaluesdescriptions
positionfront | rearShow front or rear camera when start the preview. Defaults to front
widthnumber (integer !)(optional) The preview width in pixels, default window.screen.width (applicable to the android and ios platforms only)
heightnumber (integer !)(optional) The preview height in pixels, default window.screen.height (applicable to the android and ios platforms only)
xnumber (integer !)(optional) The x origin, default 0 (applicable to the android and ios platforms only)
ynumber (integer !)(optional) The y origin, default 0 (applicable to the android and ios platforms only)
toBackboolean(optional) Brings your html in front of your preview, default false (applicable to the android and ios platforms only)
paddingBottomnumber(optional) The preview bottom padding in pixes. Useful to keep the appropriate preview sizes when orientation changes (applicable to the android and ios platforms only)
rotateWhenOrientationChangedboolean(optional) Rotate preview when orientation changes (applicable to the ios platforms only; default value is true)
storeToFileboolean(optional) Capture images to a file and return back the file path instead of returning base64 encoded data, default false.
disableExifHeaderStrippingboolean(optional) Disable automatic rotation of the image, and let the browser deal with it, default true (applicable to the android and ios platforms only)
enableHighResolutionboolean(optional) Defaults to false - iOS only - Activate high resolution image capture so that output images are from the highest resolution possible on the device
disableAudioboolean(optional) Disables audio stream to prevent permission requests, default false. (applicable to web and iOS only)
lockAndroidOrientationboolean(optional) Locks device orientation when camera is showing, default false. (applicable to Android only)
enableOpacityboolean(optional) Make the camera preview see-through. Ideal for augmented reality uses. Default false (applicable to Android and web only)
enableZoomboolean(optional) Set if you can pinch to zoom. Default false (applicable to the android and ios platforms only)
import { CameraPreview, CameraPreviewOptions } from '@capacitor-community/camera-preview';

const cameraPreviewOptions: CameraPreviewOptions = {
  position: 'rear',
  height: 1920,
  width: 1080
};
CameraPreview.start(cameraPreviewOptions);

Remember to add the style below on your app's HTML or body element:

ion-content {
  --background: transparent;
}

Take into account that this will make transparent all ion-content on application, if you want to show camera preview only in one page, just add a custom class to your ion-content and make it transparent:

.my-custom-camera-preview-content {
  --background: transparent;
}

If the camera preview is not displaying after applying the above styles, apply transparent background color to the root div element of the parent component Ex: VueJS >> App.vue component

<template>
  <ion-app id="app">
    <ion-router-outlet />
  </ion-app>
</template>

<style>
#app {
  background-color: transparent !important;
}
</style>

stop()

Stops the camera preview instance.

CameraPreview.stop();

flip()

Switch between rear and front camera only for android and ios, web is not supported javascript CameraPreview.flip()

Android: the returned promise resolves only after the switched-in camera has delivered its first preview frame. It rejects if the current preview is not ready, a capture or another flip is in progress, or the switched-in camera fails to start or times out. On a device with only one camera, it resolves without switching, preserving the existing behavior.

capture(options)

Android: capture() requires a camera preview that has delivered its first frame. It rejects if there is no active camera, the preview is not ready, or another capture is already in progress. Native capture and image-processing failures are returned as promise rejections instead of terminating the Android process.

An accepted capture is also rejected rather than left pending if the preview is paused or stopped, or if its output surface is destroyed. A flip() request made during capture is rejected without interrupting the capture. If restarting the preview after a picture fails, the capture rejects and isCameraStarted() becomes false.

Optionvaluesdescriptions
qualitynumber(optional) The picture quality, 0 - 100, default 85
widthnumber(optional) The picture width, default 0 (Device default)
heightnumber(optional) The picture height, default 0 (Device default)
import { CameraPreviewPictureOptions } from '@capacitor-community/camera-preview';

const cameraPreviewPictureOptions: CameraPreviewPictureOptions = {
  quality: 50
};

const result = await CameraPreview.capture(cameraPreviewPictureOptions);
const base64PictureData = result.value;

// do sometime with base64PictureData

captureSample(options)

Optionvaluesdescriptions
qualitynumber(optional) The picture quality, 0 - 100, default 85
Captures a sample image from the video stream. Only for Android and iOS, web implementation falls back to `capture` method. This can be used to perform real-time analysis on the current frame in the video. The argument `quality` defaults to `85` and specifies the quality/compression value: `0=max compression`, `100=max quality`.
import { CameraSampleOptions } from '@capacitor-community/camera-preview';

const cameraSampleOptions: CameraSampleOptions = {
  quality: 50
};

const result = await CameraPreview.captureSample(cameraSampleOptions);
const base64PictureData = result.value;

// do something with base64PictureData

getSupportedFlashModes()

Get the flash modes supported by the camera device currently started. Returns an array containing supported flash modes. See [FLASH_MODE](#camera_Settings.FlashMode) for possible values that can be returned
import { CameraPreviewFlashMode } from '@capacitor-community/camera-preview';

const flashModes = await CameraPreview.getSupportedFlashModes();
const supportedFlashModes: CameraPreviewFlashMode[] = flashModes.result;

setFlashMode(options)

Set the flash mode. See [FLASH_MODE](#camera_Settings.FlashMode) for details about the possible values for flashMode.
const CameraPreviewFlashMode: CameraPreviewFlashMode = 'torch';

CameraPreview.setFlashMode(cameraPreviewFlashMode);

startRecordVideo(options) ---- ANDROID and iOS only

Start capturing video

const cameraPreviewOptions: CameraPreviewOptions = {
  position: 'front',
  width: window.screen.width,
  height: window.screen.height,
};

CameraPreview.startRecordVideo(cameraPreviewOptions);

stopRecordVideo() ---- ANDROID and iOS only

Finish capturing a video. The captured video will be returned as a file path and the video format is .mp4

const resultRecordVideo = await CameraPreview.stopRecordVideo();

setOpacity(options: CameraOpacityOptions): Promise<{}>; ---- ANDROID only

Set the opacity for the camera preview

const myCamera = CameraPreview.start({ enableOpacity: true });
myCamera.setOpacity({ opacity: 0.4 });

isCameraStarted() ---- ANDROID and iOS only

Check or detect if the camera has been started

Android: this reports camera preview readiness, that is, whether the native preview has produced a first frame and is usable. It is false while the preview is still starting up, and false again after the preview has been paused, stopped, or has lost its output surface.

const { value } = await CameraPreview.isCameraStarted();

Settings

FLASH_MODE

Flash mode settings:

NameTypeDefaultNote
OFFstringoff
ONstringon
AUTOstringauto
RED_EYEstringred-eyeAndroid Only
TORCHstringtorch

Demo/Example App

A working example can be found at Example App

版本与发布记录

@capacitor-community/camera-preview 共发布 37 个版本,首次发布于 2020/07/18;过去 12 个月发布了 6 个版本。

版本发布日期距今
8.0.2latest2026/09/251 个月前
8.0.12026/04/186 个月前
8.0.02026/03/277 个月前
7.0.52026/02/178 个月前
7.0.42026/01/309 个月前
7.0.32026/01/289 个月前

其他发布通道:next → 5.0.0-0。

关于 @capacitor-community/camera-preview 的常见问题

@capacitor-community/camera-preview 是什么?

Camera preview

如何安装 @capacitor-community/camera-preview?

在项目目录运行 npm install @capacitor-community/camera-preview,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@capacitor/core(>=8.0.2)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@capacitor-community/camera-preview 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@capacitor-community/camera-preview 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@capacitor-community/camera-preview 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@capacitor-community/camera-preview 可以商用吗?

@capacitor-community/camera-preview 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@capacitor-community/camera-preview 的下载量有多少?

根据 npm 官方下载统计,@capacitor-community/camera-preview 在 2026/10/09 – 2026/11/07 这 30 天内被下载 124,658 次,日均约 4,155 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@capacitor-community/camera-preview 还在维护吗?

最新版本 8.0.2 发布于 2026/09/25(1 个月前);至今共发布 37 个版本,其中过去 12 个月发布了 6 个;首次发布于 2020/07/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。