@unif/react-native-camera 2.3.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -52,7 +52,7 @@ const App = () => {
52
52
  <Text onPress={async () => {
53
53
  const res = await api.open({
54
54
  cameraMode: [
55
- { mode: 'single', photoQuality: 'speed', jpegQuality: 0.9 },
55
+ { mode: 'single', quality: 0.9 },
56
56
  { mode: 'continuous' },
57
57
  ],
58
58
  dataRetainedMode: 'clear',
@@ -87,9 +87,11 @@ const App = () => {
87
87
 
88
88
  | 字段 | 类型 | 默认 | 说明 |
89
89
  |---|---|---|---|
90
- | `mode` | `'single' \| 'continuous' \| 'video'` | | 模式 |
91
- | `photoQuality` | `'speed' \| 'balanced' \| 'quality'` | `'speed'` | 相机管线模式,影响拍摄延迟 |
92
- | `jpegQuality` | `number (0~1)` | `0.9` | JPEG 压缩率 |
90
+ | `type` | `'back' \| 'front'` | `back` | 初始前/后摄 |
91
+ | `flashMode` | `'auto' \| 'on' \| 'off'` | | 初始闪光(保留作兼容;闪光实际由相机内 UI 控制) |
92
+ | `mode` | `'single' \| 'continuous' \| 'video'` | | 拍摄模式 |
93
+ | `quality` | `number` | `0.9` | JPEG 压缩 0~1 |
94
+ | `recTime` | `number` | — | 录制时长上限(秒,video) |
93
95
 
94
96
  ### `CameraResult`
95
97
 
@@ -99,11 +101,49 @@ const App = () => {
99
101
  | `data` | `CustomPhotoFile[]` | 拍摄的文件列表 |
100
102
  | `message` | `string` | 描述信息 |
101
103
 
104
+ ### `CustomPhotoFile`
105
+
106
+ | 字段 | 类型 | 说明 |
107
+ |---|---|---|
108
+ | `id` | `string` | 唯一 id |
109
+ | `cameraType` | `'back' \| 'front'` | 拍摄时的前/后摄 |
110
+ | `cameraMode` | `'single' \| 'continuous' \| 'video'` | 模式(原版字段名,= `mode`) |
111
+ | `path` | `string` | 本地文件路径 |
112
+ | `uri` | `string` | 文件 uri(`file://`) |
113
+ | `width` | `number` | 宽(px) |
114
+ | `height` | `number` | 高(px) |
115
+ | `mime` | `'image/jpeg' \| 'video/mp4'` | MIME 类型 |
116
+ | `mode` | `'single' \| 'continuous' \| 'video'` | 模式(2.x 字段名,= `cameraMode`) |
117
+ | `duration?` | `number` | 时长(秒,video) |
118
+
119
+ ## 测试 (Mock)
120
+
121
+ 本库依赖 `react-native-vision-camera` 等 native 模块,jest 环境无法直接加载。消费者在测试里 mock 本库:
122
+
123
+ ```js
124
+ jest.mock('@unif/react-native-camera', () =>
125
+ require('@unif/react-native-camera/mock')
126
+ );
127
+ ```
128
+
129
+ mock 后 `useCamera()` 返回 `[api, null]`,`api.open` / `api.close` 是 `jest.fn`,`open` 默认 resolve `{ code: 0, data: [], message: 'cancelled' }`。按需覆盖单次返回:
130
+
131
+ ```ts
132
+ const [api] = useCamera();
133
+ (api.open as jest.Mock).mockResolvedValueOnce({
134
+ code: 200,
135
+ data: [{ id: '1700000000000-0', cameraType: 'back', cameraMode: 'single', path: '/x.jpg', uri: 'file:///x.jpg', width: 1, height: 1, mime: 'image/jpeg', mode: 'single' }],
136
+ message: 'ok',
137
+ });
138
+ ```
139
+
140
+ 工具函数(`toFileUri` / `buildPhotoFile` 等)与所有类型在 mock 中保留真实实现。
141
+
102
142
  ## 从 v1.x 升级
103
143
 
104
144
  `v2.0.0` 的破坏性变更:
105
145
 
106
- - 移除 `cameraMode[i].photoResolution` / `videoResolution` → 改用 `photoQuality` 控制速度 / `jpegQuality` 控制文件大小
146
+ - 移除 `cameraMode[i].photoResolution` / `videoResolution` → 改用 `quality`(0~1)控制 JPEG 压缩
107
147
  - 移除 `watermark` 配置项(将在 v2.1.x 重新加入)
108
148
  - 从顶层 `@unif/react-native-camera` 直接导入类型(不再走 `/lib/typescript/src/utils` deep path)
109
149
 
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { forwardRef, useCallback, useImperativeHandle, useRef, useState } from 'react';
4
- import { StyleSheet, View } from 'react-native';
4
+ import { StyleSheet, useWindowDimensions, View } from 'react-native';
5
5
  import { Camera as VisionCamera, useMicrophonePermission, usePhotoOutput, useVideoOutput } from 'react-native-vision-camera';
6
6
  import { runOnJS, useSharedValue } from 'react-native-reanimated';
7
7
  import { Gesture, GestureDetector } from 'react-native-gesture-handler';
@@ -19,6 +19,15 @@ export const Camera = /*#__PURE__*/forwardRef(function Camera({
19
19
  zoomShared
20
20
  }, ref) {
21
21
  const cameraRef = useRef(null);
22
+ const cameraType = device.position === 'front' ? 'front' : 'back';
23
+ const {
24
+ width: screenW
25
+ } = useWindowDimensions();
26
+ // 取景框比例 = 输出照片比例(targetResolution):4:3→竖屏 高/宽=4/3, 16:9→16/9。
27
+ // 框比例 = 画面比例后,cover 不再裁两侧 → 预览 = 拍照(WYSIWYG)。
28
+ const frameRatio = (aspectRatio ?? '4:3') === '4:3' ? 4 / 3 : 16 / 9;
29
+ const frameW = screenW;
30
+ const frameH = screenW * frameRatio;
22
31
  const targetResolution = (aspectRatio ?? '4:3') === '4:3' ? {
23
32
  width: 1080,
24
33
  height: 1440
@@ -27,8 +36,9 @@ export const Camera = /*#__PURE__*/forwardRef(function Camera({
27
36
  height: 1920
28
37
  };
29
38
  const photoOutput = usePhotoOutput({
30
- qualityPrioritization: currentMode.photoQuality ?? 'speed',
31
- quality: currentMode.jpegQuality ?? 0.9,
39
+ // 速度优先级对齐原版 4.x photoQualityBalance='speed'(写死);quality 用回原版字段
40
+ qualityPrioritization: 'speed',
41
+ quality: currentMode.quality ?? 0.9,
32
42
  targetResolution
33
43
  });
34
44
  const videoOutput = useVideoOutput();
@@ -92,7 +102,7 @@ export const Camera = /*#__PURE__*/forwardRef(function Camera({
92
102
  path: raw.path,
93
103
  width: raw.width,
94
104
  height: raw.height
95
- }, currentMode.mode);
105
+ }, currentMode.mode, cameraType);
96
106
  } catch (e) {
97
107
  console.warn('capturePhoto failed', e);
98
108
  return null;
@@ -115,7 +125,7 @@ export const Camera = /*#__PURE__*/forwardRef(function Camera({
115
125
  path: filePath,
116
126
  width: 0,
117
127
  height: 0
118
- }, 'video', true);
128
+ }, 'video', cameraType, true);
119
129
  activeRecorderRef.current = null;
120
130
  finishResolverRef.current?.(file);
121
131
  finishResolverRef.current = null;
@@ -156,30 +166,50 @@ export const Camera = /*#__PURE__*/forwardRef(function Camera({
156
166
  return null;
157
167
  }
158
168
  }
159
- }), [photoOutput, videoOutput, currentMode.mode, hasMic, requestMic, flash]);
169
+ }), [photoOutput, videoOutput, currentMode.mode, hasMic, requestMic, flash, cameraType]);
160
170
  const outputs = currentMode.mode === 'video' ? [videoOutput] : [photoOutput];
161
- return /*#__PURE__*/_jsx(GestureDetector, {
162
- gesture: composed,
163
- children: /*#__PURE__*/_jsxs(View, {
164
- style: StyleSheet.absoluteFill,
165
- children: [/*#__PURE__*/_jsx(VisionCamera, {
166
- ref: cameraRef,
167
- style: StyleSheet.absoluteFill,
168
- device: device,
169
- isActive: isActive,
170
- outputs: outputs,
171
- constraints: [{
172
- photoHDR: false
171
+ return /*#__PURE__*/_jsx(View, {
172
+ style: styles.root,
173
+ children: /*#__PURE__*/_jsx(GestureDetector, {
174
+ gesture: composed,
175
+ children: /*#__PURE__*/_jsxs(View, {
176
+ style: [styles.frame, {
177
+ width: frameW,
178
+ height: frameH
173
179
  }],
174
- zoom: zoom,
175
- torchMode: currentMode.mode === 'video' && flash === 'on' ? 'on' : 'off',
176
- onSubjectAreaChanged: () => cameraRef.current?.resetFocus(),
177
- nativeID: "vision-camera"
178
- }), focusPoint && /*#__PURE__*/_jsx(FocusIndicator, {
179
- point: focusPoint,
180
- onAnimationEnd: () => setFocusPoint(null)
181
- }, `${focusPoint.x}-${focusPoint.y}`)]
180
+ children: [/*#__PURE__*/_jsx(VisionCamera, {
181
+ ref: cameraRef,
182
+ style: StyleSheet.absoluteFill,
183
+ resizeMode: "cover",
184
+ device: device,
185
+ isActive: isActive,
186
+ outputs: outputs,
187
+ constraints: [{
188
+ photoHDR: false
189
+ }],
190
+ zoom: zoom,
191
+ torchMode: currentMode.mode === 'video' && flash === 'on' ? 'on' : 'off',
192
+ onSubjectAreaChanged: () => cameraRef.current?.resetFocus(),
193
+ nativeID: "vision-camera"
194
+ }), focusPoint && /*#__PURE__*/_jsx(FocusIndicator, {
195
+ point: focusPoint,
196
+ onAnimationEnd: () => setFocusPoint(null)
197
+ }, `${focusPoint.x}-${focusPoint.y}`)]
198
+ })
182
199
  })
183
200
  });
184
201
  });
202
+ const styles = StyleSheet.create({
203
+ // 全屏黑底,把取景框居中 → 框外区域是黑边(letterbox)。
204
+ root: {
205
+ ...StyleSheet.absoluteFill,
206
+ backgroundColor: '#000',
207
+ alignItems: 'center',
208
+ justifyContent: 'center'
209
+ },
210
+ // overflow:hidden 裁掉 cover 溢出部分,框内只显示输出比例的画面。
211
+ frame: {
212
+ overflow: 'hidden'
213
+ }
214
+ });
185
215
  //# sourceMappingURL=Camera.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","useCallback","useImperativeHandle","useRef","useState","StyleSheet","View","Camera","VisionCamera","useMicrophonePermission","usePhotoOutput","useVideoOutput","runOnJS","useSharedValue","Gesture","GestureDetector","buildPhotoFile","capturePhotoToFile","FocusIndicator","jsx","_jsx","jsxs","_jsxs","NEUTRAL_ZOOM","device","currentMode","isActive","flash","aspectRatio","zoomShared","ref","cameraRef","targetResolution","width","height","photoOutput","qualityPrioritization","photoQuality","quality","jpegQuality","videoOutput","hasPermission","hasMic","requestPermission","requestMic","activeRecorderRef","preparedRecorderRef","finishResolverRef","internalZoom","zoom","zoomOffset","pinchGesture","Pinch","onBegin","value","onUpdate","e","z","scale","Math","min","max","minZoom","maxZoom","focusPoint","setFocusPoint","handleFocus","x","y","supportsFocusMetering","current","focusTo","responsiveness","adaptiveness","autoResetAfter","console","warn","tapGesture","Tap","onEnd","composed","Simultaneous","capture","raw","flashMode","enableShutterSound","path","mode","startVideo","catch","recorder","createRecorder","startRecording","filePath","_reason","file","error","stopVideo","active","durationSec","recordedDuration","finishedPromise","Promise","resolve","duration","stopRecording","outputs","gesture","children","style","absoluteFill","constraints","photoHDR","torchMode","onSubjectAreaChanged","resetFocus","nativeID","point","onAnimationEnd"],"sourceRoot":"../../../src","sources":["camera/Camera.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","useCallback","useImperativeHandle","useRef","useState","StyleSheet","useWindowDimensions","View","Camera","VisionCamera","useMicrophonePermission","usePhotoOutput","useVideoOutput","runOnJS","useSharedValue","Gesture","GestureDetector","buildPhotoFile","capturePhotoToFile","FocusIndicator","jsx","_jsx","jsxs","_jsxs","NEUTRAL_ZOOM","device","currentMode","isActive","flash","aspectRatio","zoomShared","ref","cameraRef","cameraType","position","width","screenW","frameRatio","frameW","frameH","targetResolution","height","photoOutput","qualityPrioritization","quality","videoOutput","hasPermission","hasMic","requestPermission","requestMic","activeRecorderRef","preparedRecorderRef","finishResolverRef","internalZoom","zoom","zoomOffset","pinchGesture","Pinch","onBegin","value","onUpdate","e","z","scale","Math","min","max","minZoom","maxZoom","focusPoint","setFocusPoint","handleFocus","x","y","supportsFocusMetering","current","focusTo","responsiveness","adaptiveness","autoResetAfter","console","warn","tapGesture","Tap","onEnd","composed","Simultaneous","capture","raw","flashMode","enableShutterSound","path","mode","startVideo","catch","recorder","createRecorder","startRecording","filePath","_reason","file","error","stopVideo","active","durationSec","recordedDuration","finishedPromise","Promise","resolve","duration","stopRecording","outputs","style","styles","root","children","gesture","frame","absoluteFill","resizeMode","constraints","photoHDR","torchMode","onSubjectAreaChanged","resetFocus","nativeID","point","onAnimationEnd","create","backgroundColor","alignItems","justifyContent","overflow"],"sourceRoot":"../../../src","sources":["camera/Camera.tsx"],"mappings":"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","ignoreList":[]}
@@ -58,8 +58,11 @@ export function Container({
58
58
  };
59
59
  }, [hasPermission, requestPermission]);
60
60
 
61
+ // 初始前/后摄由 config 首个 mode 的 type 决定(H5 传入),缺省 back。
62
+ // 运行时前后摄翻转是独立功能,不在本次范围。
61
63
  // 5.x:physicalDevices 字符串不带 -camera;单 'wide-angle' 规避 iOS #3773
62
- const device = useCameraDevice('back', {
64
+ const initialPosition = config.cameraMode[0]?.type ?? 'back';
65
+ const device = useCameraDevice(initialPosition, {
63
66
  physicalDevices: ['wide-angle']
64
67
  });
65
68
  const cameraRef = useRef(null);
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","useState","Linking","StyleSheet","View","useCameraDevice","useCameraPermission","useSharedValue","NoCamera","NoPermission","Loading","Camera","PreViewContainer","Footer","SetUp","jsx","_jsx","jsxs","_jsxs","NEUTRAL_ZOOM","Container","config","onSettle","settledRef","settle","r","current","code","data","message","hasPermission","requestPermission","state","setState","cancelled","then","ok","catch","device","physicalDevices","cameraRef","photos","setPhotos","previewing","setPreviewing","recording","setRecording","modeIndex","setModeIndex","currentMode","cameraMode","flash","setFlash","aspectRatio","setAspectRatio","zoomShared","lensLabel","setLensLabel","toFixed","onShutter","mode","startVideo","f","stopVideo","capture","prev","onCancel","onOpenSettings","openSettings","style","styles","root","testID","children","files","onRetake","onConfirm","onToggleLens","startsWith","minZoom","value","ref","onChangeFlash","onChangeAspectRatio","modes","currentIndex","onSelectMode","i","dataRetainedMode","onFinishBurst","undefined","burstCount","length","create","flex","backgroundColor","justifyContent","alignItems"],"sourceRoot":"../../../src","sources":["camera/Container.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useRef","useState","Linking","StyleSheet","View","useCameraDevice","useCameraPermission","useSharedValue","NoCamera","NoPermission","Loading","Camera","PreViewContainer","Footer","SetUp","jsx","_jsx","jsxs","_jsxs","NEUTRAL_ZOOM","Container","config","onSettle","settledRef","settle","r","current","code","data","message","hasPermission","requestPermission","state","setState","cancelled","then","ok","catch","initialPosition","cameraMode","type","device","physicalDevices","cameraRef","photos","setPhotos","previewing","setPreviewing","recording","setRecording","modeIndex","setModeIndex","currentMode","flash","setFlash","aspectRatio","setAspectRatio","zoomShared","lensLabel","setLensLabel","toFixed","onShutter","mode","startVideo","f","stopVideo","capture","prev","onCancel","onOpenSettings","openSettings","style","styles","root","testID","children","files","onRetake","onConfirm","onToggleLens","startsWith","minZoom","value","ref","onChangeFlash","onChangeAspectRatio","modes","currentIndex","onSelectMode","i","dataRetainedMode","onFinishBurst","undefined","burstCount","length","create","flex","backgroundColor","justifyContent","alignItems"],"sourceRoot":"../../../src","sources":["camera/Container.tsx"],"mappings":"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","ignoreList":[]}
@@ -2,5 +2,4 @@
2
2
 
3
3
  export { useCamera } from "./hooks/index.js";
4
4
  export * from "./utils/index.js";
5
- export const VERSION = '2.0.0';
6
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useCamera","VERSION"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,kBAAS;AACnC,cAAc,kBAAS;AAEvB,OAAO,MAAMC,OAAO,GAAG,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["useCamera"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,kBAAS;AACnC,cAAc,kBAAS","ignoreList":[]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ // Jest mock for @unif/react-native-camera —— 供消费者在测试中替换本库,
4
+ // 避免 jest 环境加载不到 vision-camera 等 native 模块而崩溃。
5
+ //
6
+ // 用法(消费者 jest setup 或单个测试文件):
7
+ //
8
+ // jest.mock('@unif/react-native-camera', () =>
9
+ // require('@unif/react-native-camera/mock')
10
+ // );
11
+ //
12
+ // 替换后 useCamera() 返回 [api, null]:api.open / api.close 是 jest.fn,
13
+ // open 默认 resolve { code: 0, data: [], message: 'cancelled' }。
14
+ // 消费者可按需覆盖单次返回:
15
+ //
16
+ // const [api] = useCamera();
17
+ // (api.open as jest.Mock).mockResolvedValueOnce({
18
+ // code: 200, data: [{ path: '/x.jpg', uri: 'file:///x.jpg', width: 1, height: 1,
19
+ // mime: 'image/jpeg', mode: 'single' }], message: 'ok',
20
+ // });
21
+
22
+ // 类型 + 纯工具函数(toFileUri / buildPhotoFile / depsAreSame / pxToDp)保留真实实现 ——
23
+ // 它们不碰 native,消费者测试里跑真实逻辑比 mock 更有意义。
24
+ export * from "./utils/index.js";
25
+ const cancelled = {
26
+ code: 0,
27
+ data: [],
28
+ message: 'cancelled'
29
+ };
30
+ export function useCamera() {
31
+ const api = {
32
+ open: jest.fn(async () => cancelled),
33
+ close: jest.fn()
34
+ };
35
+ return [api, null];
36
+ }
37
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["cancelled","code","data","message","useCamera","api","open","jest","fn","close"],"sourceRoot":"../../src","sources":["mock.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA,cAAc,kBAAS;AAEvB,MAAMA,SAAuB,GAAG;EAAEC,IAAI,EAAE,CAAC;EAAEC,IAAI,EAAE,EAAE;EAAEC,OAAO,EAAE;AAAY,CAAC;AAE3E,OAAO,SAASC,SAASA,CAAA,EAAsB;EAC7C,MAAMC,GAAc,GAAG;IACrBC,IAAI,EAAEC,IAAI,CAACC,EAAE,CAAC,YAAYR,SAAS,CAAsB;IACzDS,KAAK,EAAEF,IAAI,CAACC,EAAE,CAAC;EACjB,CAAC;EACD,OAAO,CAACH,GAAG,EAAE,IAAI,CAAC;AACpB","ignoreList":[]}
@@ -4,8 +4,14 @@ export function toFileUri(path) {
4
4
  if (path.startsWith('file://')) return path;
5
5
  return `file://${path}`;
6
6
  }
7
- export function buildPhotoFile(raw, mode, isVideo = false) {
7
+
8
+ // 单调递增计数器,保证同毫秒多张照片 id 不撞(原版用纯时间戳有撞 id 风险)。
9
+ let photoIdCounter = 0;
10
+ export function buildPhotoFile(raw, mode, cameraType, isVideo = false) {
8
11
  return {
12
+ id: `${Date.now()}-${photoIdCounter++}`,
13
+ cameraType,
14
+ cameraMode: mode,
9
15
  path: raw.path,
10
16
  uri: toFileUri(raw.path),
11
17
  width: raw.width,
@@ -1 +1 @@
1
- {"version":3,"names":["toFileUri","path","startsWith","buildPhotoFile","raw","mode","isVideo","uri","width","height","mime","duration"],"sourceRoot":"../../../src","sources":["utils/util.ts"],"mappings":";;AAEA,OAAO,SAASA,SAASA,CAACC,IAAY,EAAU;EAC9C,IAAIA,IAAI,CAACC,UAAU,CAAC,SAAS,CAAC,EAAE,OAAOD,IAAI;EAC3C,OAAO,UAAUA,IAAI,EAAE;AACzB;AAEA,OAAO,SAASE,cAAcA,CAC5BC,GAAuE,EACvEC,IAAoB,EACpBC,OAAgB,GAAG,KAAK,EACP;EACjB,OAAO;IACLL,IAAI,EAAEG,GAAG,CAACH,IAAI;IACdM,GAAG,EAAEP,SAAS,CAACI,GAAG,CAACH,IAAI,CAAC;IACxBO,KAAK,EAAEJ,GAAG,CAACI,KAAK;IAChBC,MAAM,EAAEL,GAAG,CAACK,MAAM;IAClBC,IAAI,EAAEJ,OAAO,GAAG,WAAW,GAAG,YAAY;IAC1CD,IAAI;IACJ,IAAID,GAAG,CAACO,QAAQ,IAAI,IAAI,GAAG;MAAEA,QAAQ,EAAEP,GAAG,CAACO;IAAS,CAAC,GAAG,CAAC,CAAC;EAC5D,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["toFileUri","path","startsWith","photoIdCounter","buildPhotoFile","raw","mode","cameraType","isVideo","id","Date","now","cameraMode","uri","width","height","mime","duration"],"sourceRoot":"../../../src","sources":["utils/util.ts"],"mappings":";;AAEA,OAAO,SAASA,SAASA,CAACC,IAAY,EAAU;EAC9C,IAAIA,IAAI,CAACC,UAAU,CAAC,SAAS,CAAC,EAAE,OAAOD,IAAI;EAC3C,OAAO,UAAUA,IAAI,EAAE;AACzB;;AAEA;AACA,IAAIE,cAAc,GAAG,CAAC;AAEtB,OAAO,SAASC,cAAcA,CAC5BC,GAAuE,EACvEC,IAAoB,EACpBC,UAAsB,EACtBC,OAAgB,GAAG,KAAK,EACP;EACjB,OAAO;IACLC,EAAE,EAAE,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,IAAIR,cAAc,EAAE,EAAE;IACvCI,UAAU;IACVK,UAAU,EAAEN,IAAI;IAChBL,IAAI,EAAEI,GAAG,CAACJ,IAAI;IACdY,GAAG,EAAEb,SAAS,CAACK,GAAG,CAACJ,IAAI,CAAC;IACxBa,KAAK,EAAET,GAAG,CAACS,KAAK;IAChBC,MAAM,EAAEV,GAAG,CAACU,MAAM;IAClBC,IAAI,EAAER,OAAO,GAAG,WAAW,GAAG,YAAY;IAC1CF,IAAI;IACJ,IAAID,GAAG,CAACY,QAAQ,IAAI,IAAI,GAAG;MAAEA,QAAQ,EAAEZ,GAAG,CAACY;IAAS,CAAC,GAAG,CAAC,CAAC;EAC5D,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../../../src/camera/Camera.tsx"],"names":[],"mappings":"AAQA,OAAO,EAML,KAAK,YAAY,EAIlB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EAGhB,MAAM,UAAU,CAAC;AAIlB,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAItD,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC/C,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;CAClD,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,MAAM,gGA0LjB,CAAC"}
1
+ {"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../../../src/camera/Camera.tsx"],"names":[],"mappings":"AAQA,OAAO,EAML,KAAK,YAAY,EAIlB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAS,MAAM,UAAU,CAAC;AAInE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAItD,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC/C,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;CAClD,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,MAAM,gGAgNjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../src/camera/Container.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAmB,UAAU,EAAE,MAAM,UAAU,CAAC;AAW1E,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;CACrC,CAAC;AAIF,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,2CAqMpD"}
1
+ {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../src/camera/Container.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAmB,UAAU,EAAE,MAAM,UAAU,CAAC;AAW1E,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;CACrC,CAAC;AAIF,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,2CAwMpD"}
@@ -1,4 +1,3 @@
1
1
  export { useCamera } from './hooks';
2
2
  export * from './utils';
3
- export declare const VERSION = "2.0.0";
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,cAAc,SAAS,CAAC;AAExB,eAAO,MAAM,OAAO,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CameraApi } from './utils';
2
+ export * from './utils';
3
+ export declare function useCamera(): [CameraApi, null];
4
+ //# sourceMappingURL=mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../src/mock.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,SAAS,CAAC;AAIvD,cAAc,SAAS,CAAC;AAIxB,wBAAgB,SAAS,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAM7C"}
@@ -1,5 +1,5 @@
1
1
  export type CameraType = 'back' | 'front';
2
- export type PhotoQuality = 'speed' | 'balanced' | 'quality';
2
+ export type FlashMode = 'auto' | 'on' | 'off';
3
3
  export type DataRetainedMode = 'clear' | 'retain';
4
4
  export type CameraModeName = 'single' | 'continuous' | 'video';
5
5
  export type Point = {
@@ -7,20 +7,34 @@ export type Point = {
7
7
  y: number;
8
8
  };
9
9
  export type CameraMode = {
10
+ /** 初始前/后摄,缺省 back。H5 传入,接线为初始 device position。 */
11
+ type?: CameraType;
12
+ /** 初始闪光(原版字段,保留作 API 兼容)。闪光由相机内 UI 控制,不从 config 接线。 */
13
+ flashMode?: FlashMode;
14
+ /** 拍摄模式。 */
10
15
  mode: CameraModeName;
11
- photoQuality?: PhotoQuality;
12
- jpegQuality?: number;
16
+ /** JPEG 压缩 0~1,缺省 0.9。内部速度优先级写死 'speed'(对齐原版 4.x photoQualityBalance)。 */
17
+ quality?: number;
18
+ /** 录制时长上限(秒),video 模式。原版字段,保留;未用到则 no-op。 */
19
+ recTime?: number;
13
20
  };
14
21
  export type OpenConfig = {
15
22
  cameraMode: CameraMode[];
16
23
  dataRetainedMode: DataRetainedMode;
17
24
  };
18
25
  export type CustomPhotoFile = {
26
+ /** 唯一 id,时间戳 + 序号(避免同毫秒撞 id)。 */
27
+ id: string;
28
+ /** 拍摄时的前/后摄。 */
29
+ cameraType: CameraType;
30
+ /** 模式(原版字段名,与 mode 同值)。 */
31
+ cameraMode: CameraModeName;
19
32
  path: string;
20
33
  uri: string;
21
34
  width: number;
22
35
  height: number;
23
36
  mime: 'image/jpeg' | 'video/mp4';
37
+ /** 模式(2.x 字段名,与 cameraMode 同值)。 */
24
38
  mode: CameraModeName;
25
39
  duration?: number;
26
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../../src/utils/interface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAE1C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;AAE/D,MAAM,MAAM,KAAK,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,GAAG,WAAW,CAAC;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../../src/utils/interface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAE1C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AAE9C,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;AAE/D,MAAM,MAAM,KAAK,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG;IACvB,kDAAkD;IAClD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,uDAAuD;IACvD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY;IACZ,IAAI,EAAE,cAAc,CAAC;IACrB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAE5B,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,2BAA2B;IAC3B,UAAU,EAAE,cAAc,CAAC;IAE3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,GAAG,WAAW,CAAC;IACjC,mCAAmC;IACnC,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC"}
@@ -1,9 +1,9 @@
1
- import type { CustomPhotoFile, CameraModeName } from './interface';
1
+ import type { CustomPhotoFile, CameraModeName, CameraType } from './interface';
2
2
  export declare function toFileUri(path: string): string;
3
3
  export declare function buildPhotoFile(raw: {
4
4
  path: string;
5
5
  width: number;
6
6
  height: number;
7
7
  duration?: number;
8
- }, mode: CameraModeName, isVideo?: boolean): CustomPhotoFile;
8
+ }, mode: CameraModeName, cameraType: CameraType, isVideo?: boolean): CustomPhotoFile;
9
9
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/utils/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EACvE,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,OAAe,GACvB,eAAe,CAUjB"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/utils/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE/E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9C;AAKD,wBAAgB,cAAc,CAC5B,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EACvE,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,OAAe,GACvB,eAAe,CAajB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unif/react-native-camera",
3
- "version": "2.3.0",
3
+ "version": "2.6.0",
4
4
  "description": "基于 react-native-vision-camera 的相机库(单拍/连拍/视频+水印+预览)",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -10,6 +10,11 @@
10
10
  "types": "./lib/typescript/src/index.d.ts",
11
11
  "default": "./lib/module/index.js"
12
12
  },
13
+ "./mock": {
14
+ "source": "./src/mock.ts",
15
+ "types": "./lib/typescript/src/mock.d.ts",
16
+ "default": "./lib/module/mock.js"
17
+ },
13
18
  "./package.json": "./package.json"
14
19
  },
15
20
  "files": [
@@ -5,7 +5,7 @@ import {
5
5
  useRef,
6
6
  useState,
7
7
  } from 'react';
8
- import { StyleSheet, View } from 'react-native';
8
+ import { StyleSheet, useWindowDimensions, View } from 'react-native';
9
9
  import {
10
10
  Camera as VisionCamera,
11
11
  useMicrophonePermission,
@@ -20,12 +20,7 @@ import {
20
20
  import { runOnJS, useSharedValue } from 'react-native-reanimated';
21
21
  import type { SharedValue } from 'react-native-reanimated';
22
22
  import { Gesture, GestureDetector } from 'react-native-gesture-handler';
23
- import type {
24
- CameraMode,
25
- CustomPhotoFile,
26
- PhotoQuality,
27
- Point,
28
- } from '../utils';
23
+ import type { CameraMode, CustomPhotoFile, Point } from '../utils';
29
24
  import { buildPhotoFile } from '../utils';
30
25
  import { capturePhotoToFile } from './capturePhotoHelper';
31
26
  import { FocusIndicator } from './FocusIndicator';
@@ -54,15 +49,24 @@ export const Camera = forwardRef<CameraHandle, Props>(function Camera(
54
49
  ) {
55
50
  const cameraRef = useRef<CameraRef>(null);
56
51
 
52
+ const cameraType = device.position === 'front' ? 'front' : 'back';
53
+
54
+ const { width: screenW } = useWindowDimensions();
55
+ // 取景框比例 = 输出照片比例(targetResolution):4:3→竖屏 高/宽=4/3, 16:9→16/9。
56
+ // 框比例 = 画面比例后,cover 不再裁两侧 → 预览 = 拍照(WYSIWYG)。
57
+ const frameRatio = (aspectRatio ?? '4:3') === '4:3' ? 4 / 3 : 16 / 9;
58
+ const frameW = screenW;
59
+ const frameH = screenW * frameRatio;
60
+
57
61
  const targetResolution =
58
62
  (aspectRatio ?? '4:3') === '4:3'
59
63
  ? { width: 1080, height: 1440 }
60
64
  : { width: 1080, height: 1920 };
61
65
 
62
66
  const photoOutput = usePhotoOutput({
63
- qualityPrioritization: (currentMode.photoQuality ??
64
- 'speed') as PhotoQuality,
65
- quality: currentMode.jpegQuality ?? 0.9,
67
+ // 速度优先级对齐原版 4.x photoQualityBalance='speed'(写死);quality 用回原版字段
68
+ qualityPrioritization: 'speed',
69
+ quality: currentMode.quality ?? 0.9,
66
70
  targetResolution,
67
71
  });
68
72
 
@@ -128,7 +132,8 @@ export const Camera = forwardRef<CameraHandle, Props>(function Camera(
128
132
  });
129
133
  return buildPhotoFile(
130
134
  { path: raw.path, width: raw.width, height: raw.height },
131
- currentMode.mode
135
+ currentMode.mode,
136
+ cameraType
132
137
  );
133
138
  } catch (e) {
134
139
  console.warn('capturePhoto failed', e);
@@ -154,6 +159,7 @@ export const Camera = forwardRef<CameraHandle, Props>(function Camera(
154
159
  const file = buildPhotoFile(
155
160
  { path: filePath, width: 0, height: 0 },
156
161
  'video',
162
+ cameraType,
157
163
  true
158
164
  );
159
165
  activeRecorderRef.current = null;
@@ -202,36 +208,59 @@ export const Camera = forwardRef<CameraHandle, Props>(function Camera(
202
208
  }
203
209
  },
204
210
  }),
205
- [photoOutput, videoOutput, currentMode.mode, hasMic, requestMic, flash]
211
+ [
212
+ photoOutput,
213
+ videoOutput,
214
+ currentMode.mode,
215
+ hasMic,
216
+ requestMic,
217
+ flash,
218
+ cameraType,
219
+ ]
206
220
  );
207
221
 
208
222
  const outputs = currentMode.mode === 'video' ? [videoOutput] : [photoOutput];
209
223
 
210
224
  return (
211
- <GestureDetector gesture={composed}>
212
- <View style={StyleSheet.absoluteFill}>
213
- <VisionCamera
214
- ref={cameraRef}
215
- style={StyleSheet.absoluteFill}
216
- device={device}
217
- isActive={isActive}
218
- outputs={outputs as CameraProps['outputs']}
219
- constraints={[{ photoHDR: false }]}
220
- zoom={zoom}
221
- torchMode={
222
- currentMode.mode === 'video' && flash === 'on' ? 'on' : 'off'
223
- }
224
- onSubjectAreaChanged={() => cameraRef.current?.resetFocus()}
225
- nativeID="vision-camera"
226
- />
227
- {focusPoint && (
228
- <FocusIndicator
229
- key={`${focusPoint.x}-${focusPoint.y}`}
230
- point={focusPoint}
231
- onAnimationEnd={() => setFocusPoint(null)}
225
+ <View style={styles.root}>
226
+ <GestureDetector gesture={composed}>
227
+ <View style={[styles.frame, { width: frameW, height: frameH }]}>
228
+ <VisionCamera
229
+ ref={cameraRef}
230
+ style={StyleSheet.absoluteFill}
231
+ resizeMode="cover"
232
+ device={device}
233
+ isActive={isActive}
234
+ outputs={outputs as CameraProps['outputs']}
235
+ constraints={[{ photoHDR: false }]}
236
+ zoom={zoom}
237
+ torchMode={
238
+ currentMode.mode === 'video' && flash === 'on' ? 'on' : 'off'
239
+ }
240
+ onSubjectAreaChanged={() => cameraRef.current?.resetFocus()}
241
+ nativeID="vision-camera"
232
242
  />
233
- )}
234
- </View>
235
- </GestureDetector>
243
+ {focusPoint && (
244
+ <FocusIndicator
245
+ key={`${focusPoint.x}-${focusPoint.y}`}
246
+ point={focusPoint}
247
+ onAnimationEnd={() => setFocusPoint(null)}
248
+ />
249
+ )}
250
+ </View>
251
+ </GestureDetector>
252
+ </View>
236
253
  );
237
254
  });
255
+
256
+ const styles = StyleSheet.create({
257
+ // 全屏黑底,把取景框居中 → 框外区域是黑边(letterbox)。
258
+ root: {
259
+ ...StyleSheet.absoluteFill,
260
+ backgroundColor: '#000',
261
+ alignItems: 'center',
262
+ justifyContent: 'center',
263
+ },
264
+ // overflow:hidden 裁掉 cover 溢出部分,框内只显示输出比例的画面。
265
+ frame: { overflow: 'hidden' },
266
+ });
@@ -72,8 +72,11 @@ export function Container({ config, onSettle }: Props) {
72
72
  };
73
73
  }, [hasPermission, requestPermission]);
74
74
 
75
+ // 初始前/后摄由 config 首个 mode 的 type 决定(H5 传入),缺省 back。
76
+ // 运行时前后摄翻转是独立功能,不在本次范围。
75
77
  // 5.x:physicalDevices 字符串不带 -camera;单 'wide-angle' 规避 iOS #3773
76
- const device = useCameraDevice('back', {
78
+ const initialPosition = config.cameraMode[0]?.type ?? 'back';
79
+ const device = useCameraDevice(initialPosition, {
77
80
  physicalDevices: ['wide-angle'],
78
81
  });
79
82
 
package/src/index.tsx CHANGED
@@ -1,4 +1,2 @@
1
1
  export { useCamera } from './hooks';
2
2
  export * from './utils';
3
-
4
- export const VERSION = '2.0.0';
package/src/mock.ts ADDED
@@ -0,0 +1,34 @@
1
+ // Jest mock for @unif/react-native-camera —— 供消费者在测试中替换本库,
2
+ // 避免 jest 环境加载不到 vision-camera 等 native 模块而崩溃。
3
+ //
4
+ // 用法(消费者 jest setup 或单个测试文件):
5
+ //
6
+ // jest.mock('@unif/react-native-camera', () =>
7
+ // require('@unif/react-native-camera/mock')
8
+ // );
9
+ //
10
+ // 替换后 useCamera() 返回 [api, null]:api.open / api.close 是 jest.fn,
11
+ // open 默认 resolve { code: 0, data: [], message: 'cancelled' }。
12
+ // 消费者可按需覆盖单次返回:
13
+ //
14
+ // const [api] = useCamera();
15
+ // (api.open as jest.Mock).mockResolvedValueOnce({
16
+ // code: 200, data: [{ path: '/x.jpg', uri: 'file:///x.jpg', width: 1, height: 1,
17
+ // mime: 'image/jpeg', mode: 'single' }], message: 'ok',
18
+ // });
19
+
20
+ import type { CameraApi, CameraResult } from './utils';
21
+
22
+ // 类型 + 纯工具函数(toFileUri / buildPhotoFile / depsAreSame / pxToDp)保留真实实现 ——
23
+ // 它们不碰 native,消费者测试里跑真实逻辑比 mock 更有意义。
24
+ export * from './utils';
25
+
26
+ const cancelled: CameraResult = { code: 0, data: [], message: 'cancelled' };
27
+
28
+ export function useCamera(): [CameraApi, null] {
29
+ const api: CameraApi = {
30
+ open: jest.fn(async () => cancelled) as CameraApi['open'],
31
+ close: jest.fn() as CameraApi['close'],
32
+ };
33
+ return [api, null];
34
+ }
@@ -1,6 +1,6 @@
1
1
  export type CameraType = 'back' | 'front';
2
2
 
3
- export type PhotoQuality = 'speed' | 'balanced' | 'quality';
3
+ export type FlashMode = 'auto' | 'on' | 'off';
4
4
 
5
5
  export type DataRetainedMode = 'clear' | 'retain';
6
6
 
@@ -9,9 +9,16 @@ export type CameraModeName = 'single' | 'continuous' | 'video';
9
9
  export type Point = { x: number; y: number };
10
10
 
11
11
  export type CameraMode = {
12
+ /** 初始前/后摄,缺省 back。H5 传入,接线为初始 device position。 */
13
+ type?: CameraType;
14
+ /** 初始闪光(原版字段,保留作 API 兼容)。闪光由相机内 UI 控制,不从 config 接线。 */
15
+ flashMode?: FlashMode;
16
+ /** 拍摄模式。 */
12
17
  mode: CameraModeName;
13
- photoQuality?: PhotoQuality;
14
- jpegQuality?: number;
18
+ /** JPEG 压缩 0~1,缺省 0.9。内部速度优先级写死 'speed'(对齐原版 4.x photoQualityBalance)。 */
19
+ quality?: number;
20
+ /** 录制时长上限(秒),video 模式。原版字段,保留;未用到则 no-op。 */
21
+ recTime?: number;
15
22
  };
16
23
 
17
24
  export type OpenConfig = {
@@ -20,11 +27,20 @@ export type OpenConfig = {
20
27
  };
21
28
 
22
29
  export type CustomPhotoFile = {
30
+ // —— 原版字段 ——
31
+ /** 唯一 id,时间戳 + 序号(避免同毫秒撞 id)。 */
32
+ id: string;
33
+ /** 拍摄时的前/后摄。 */
34
+ cameraType: CameraType;
35
+ /** 模式(原版字段名,与 mode 同值)。 */
36
+ cameraMode: CameraModeName;
37
+ // —— 2.x 字段 ——
23
38
  path: string;
24
39
  uri: string;
25
40
  width: number;
26
41
  height: number;
27
42
  mime: 'image/jpeg' | 'video/mp4';
43
+ /** 模式(2.x 字段名,与 cameraMode 同值)。 */
28
44
  mode: CameraModeName;
29
45
  duration?: number;
30
46
  };
package/src/utils/util.ts CHANGED
@@ -1,16 +1,23 @@
1
- import type { CustomPhotoFile, CameraModeName } from './interface';
1
+ import type { CustomPhotoFile, CameraModeName, CameraType } from './interface';
2
2
 
3
3
  export function toFileUri(path: string): string {
4
4
  if (path.startsWith('file://')) return path;
5
5
  return `file://${path}`;
6
6
  }
7
7
 
8
+ // 单调递增计数器,保证同毫秒多张照片 id 不撞(原版用纯时间戳有撞 id 风险)。
9
+ let photoIdCounter = 0;
10
+
8
11
  export function buildPhotoFile(
9
12
  raw: { path: string; width: number; height: number; duration?: number },
10
13
  mode: CameraModeName,
14
+ cameraType: CameraType,
11
15
  isVideo: boolean = false
12
16
  ): CustomPhotoFile {
13
17
  return {
18
+ id: `${Date.now()}-${photoIdCounter++}`,
19
+ cameraType,
20
+ cameraMode: mode,
14
21
  path: raw.path,
15
22
  uri: toFileUri(raw.path),
16
23
  width: raw.width,