Package Exports
- @unif/react-native-camera
- @unif/react-native-camera/package.json
Readme
@unif/react-native-camera
基于 react-native-vision-camera 5.x 构建的 React Native 相机库,提供模态化相机界面,支持单拍 / 连拍 / 视频录制 / 捏合变焦 / 镜头切换 / 点击对焦。
安装
yarn add @unif/react-native-camera \
react-native-vision-camera \
react-native-nitro-modules \
react-native-nitro-image \
react-native-reanimated \
react-native-worklets \
react-native-reanimated-carousel \
react-native-gesture-handler \
react-native-safe-area-contextiOS 还需 pod install。
权限配置
iOS Info.plist:
<key>NSCameraUsageDescription</key><string>...</string>
<key>NSMicrophoneUsageDescription</key><string>...</string>
<key>NSPhotoLibraryAddUsageDescription</key><string>...</string>Android AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />用法
import { useCamera } from '@unif/react-native-camera';
const App = () => {
const [api, holder] = useCamera();
return (
<View>
<Text onPress={async () => {
const res = await api.open({
cameraMode: [
{ mode: 'single', photoQuality: 'speed', jpegQuality: 0.9 },
{ mode: 'continuous' },
],
dataRetainedMode: 'clear',
});
// res.code: 200=ok, 0=cancelled, 403=no_permission, 404=no_device, 500=capture_failed, 503=video_failed
}}>打开相机</Text>
{holder}
</View>
);
};API
useCamera() → [api, holder]
返回 [CameraApi, React.ReactElement],把 holder 渲染进 React 树,调用 api.open(config) 打开相机。
CameraApi
open(config: OpenConfig): Promise<CameraResult>close(): void
OpenConfig
| 字段 | 类型 | 说明 |
|---|---|---|
cameraMode |
CameraMode[] |
至少一项;多项时底部出现模式 tab |
dataRetainedMode |
'clear' | 'retain' |
模式切换时是否保留已拍照片 |
CameraMode
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
mode |
'single' | 'continuous' | 'video' |
— | 模式 |
photoQuality |
'speed' | 'balanced' | 'quality' |
'speed' |
相机管线模式,影响拍摄延迟 |
jpegQuality |
number (0~1) |
0.9 |
JPEG 压缩率 |
CameraResult
| 字段 | 类型 | 说明 |
|---|---|---|
code |
0 | 200 | 403 | 404 | 500 | 503 |
状态码 |
data |
CustomPhotoFile[] |
拍摄的文件列表 |
message |
string |
描述信息 |
从 v1.x 升级
v2.0.0 的破坏性变更:
- 移除
cameraMode[i].photoResolution/videoResolution→ 改用photoQuality控制速度 /jpegQuality控制文件大小 - 移除
watermark配置项(将在 v2.1.x 重新加入) - 从顶层
@unif/react-native-camera直接导入类型(不再走/lib/typescript/src/utilsdeep path)
许可
MIT