capacitor-plugin-camera-forked 3.0.113 → 3.0.120

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/LICENSE CHANGED
File without changes
package/README.md CHANGED
@@ -290,7 +290,7 @@ stopCamera() => Promise<void>
290
290
  ### takeSnapshot(...)
291
291
 
292
292
  ```typescript
293
- takeSnapshot(options: { quality?: number; checkBlur?: boolean; }) => Promise<{ base64: string; isBlur?: boolean; }>
293
+ takeSnapshot(options: { quality?: number; checkBlur?: boolean; }) => Promise<{ base64: string; confidence?: number; }>
294
294
  ```
295
295
 
296
296
  take a snapshot as base64.
@@ -299,7 +299,7 @@ take a snapshot as base64.
299
299
  | ------------- | ------------------------------------------------------- |
300
300
  | **`options`** | <code>{ quality?: number; checkBlur?: boolean; }</code> |
301
301
 
302
- **Returns:** <code>Promise&lt;{ base64: string; isBlur?: boolean; }&gt;</code>
302
+ **Returns:** <code>Promise&lt;{ base64: string; confidence?: number; }&gt;</code>
303
303
 
304
304
  --------------------
305
305
 
@@ -354,14 +354,14 @@ take a snapshot on to a canvas. Web Only
354
354
  ### takePhoto(...)
355
355
 
356
356
  ```typescript
357
- takePhoto(options: { pathToSave?: string; includeBase64?: boolean; }) => Promise<{ path?: string; base64?: string; blob?: Blob; isBlur?: boolean; }>
357
+ takePhoto(options: { pathToSave?: string; includeBase64?: boolean; }) => Promise<{ path?: string; base64?: string; blob?: Blob; confidence?: number; }>
358
358
  ```
359
359
 
360
360
  | Param | Type |
361
361
  | ------------- | -------------------------------------------------------------- |
362
362
  | **`options`** | <code>{ pathToSave?: string; includeBase64?: boolean; }</code> |
363
363
 
364
- **Returns:** <code>Promise&lt;{ path?: string; base64?: string; blob?: any; isBlur?: boolean; }&gt;</code>
364
+ **Returns:** <code>Promise&lt;{ path?: string; base64?: string; blob?: any; confidence?: number; }&gt;</code>
365
365
 
366
366
  --------------------
367
367
 
@@ -130,6 +130,7 @@ public class CameraPreviewPlugin extends Plugin {
130
130
 
131
131
  previewView = new PreviewView(getContext());
132
132
  previewView.setScaleType(PreviewView.ScaleType.FIT_CENTER);
133
+ previewView.setBackgroundColor(Color.TRANSPARENT);
133
134
  FrameLayout.LayoutParams cameraPreviewParams = new FrameLayout.LayoutParams(
134
135
  FrameLayout.LayoutParams.MATCH_PARENT,
135
136
  FrameLayout.LayoutParams.MATCH_PARENT
@@ -223,9 +224,9 @@ public class CameraPreviewPlugin extends Plugin {
223
224
  // Only detect blur if checkBlur option is true
224
225
  boolean shouldCheckBlur = takeSnapshotCall.getBoolean("checkBlur", false);
225
226
  if (shouldCheckBlur) {
226
- boolean isBlur = calculateBlurResult(bitmap);
227
- result.put("isBlur", isBlur);
228
- Log.d("Camera", "Blur detection - Label: " + (isBlur ? "blur" : "sharp"));
227
+ double confidence = calculateBlurConfidence(bitmap);
228
+ result.put("confidence", confidence);
229
+ Log.d("Camera", "Blur detection - Confidence: " + confidence);
229
230
  } else {
230
231
  Log.d("Camera", "Blur detection disabled for performance");
231
232
  }
@@ -1127,9 +1128,16 @@ public class CameraPreviewPlugin extends Plugin {
1127
1128
  if (call.getBoolean("includeBase64", false)) {
1128
1129
  String base64 = Base64.encodeToString(convertFileToByteArray(file), Base64.DEFAULT);
1129
1130
  result.put("base64", base64);
1131
+
1132
+ // Detect blur if base64 is included
1133
+ Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
1134
+ if (bitmap != null) {
1135
+ double confidence = calculateBlurConfidence(bitmap);
1136
+ result.put("confidence", confidence);
1137
+ Log.d("Camera", "Blur detection - Confidence: " + confidence);
1138
+ }
1130
1139
  }
1131
1140
  result.put("path", file.getAbsolutePath());
1132
- call.resolve(result);
1133
1141
  }
1134
1142
 
1135
1143
  @Override
@@ -1455,6 +1463,25 @@ public class CameraPreviewPlugin extends Plugin {
1455
1463
  return laplacianScore < 50;
1456
1464
  }
1457
1465
  }
1466
+
1467
+ /**
1468
+ * Calculate blur confidence score (0-1 where 1 is sharp, 0 is blurry)
1469
+ */
1470
+ private double calculateBlurConfidence(Bitmap bitmap) {
1471
+ if (bitmap == null) return 0.0;
1472
+
1473
+ // Use TFLite model if available for detailed confidence
1474
+ if (blurDetectionHelper != null && blurDetectionHelper.isInitialized()) {
1475
+ java.util.Map<String, Object> result = blurDetectionHelper.detectBlurWithConfidence(bitmap);
1476
+ Double blurConfidence = (Double) result.get("blurConfidence");
1477
+ return blurConfidence != null ? blurConfidence : 0.0;
1478
+ } else {
1479
+ // Fallback to Laplacian algorithm with confidence calculation
1480
+ double laplacianScore = calculateLaplacianBlurScore(bitmap);
1481
+ // Normalize to 0-1 range (higher score = sharper image)
1482
+ return Math.max(0.0, Math.min(1.0, laplacianScore / 300.0));
1483
+ }
1484
+ }
1458
1485
 
1459
1486
  /**
1460
1487
  * Original Laplacian blur detection (fallback)
package/dist/docs.json CHANGED
@@ -189,7 +189,7 @@
189
189
  },
190
190
  {
191
191
  "name": "takeSnapshot",
192
- "signature": "(options: { quality?: number; checkBlur?: boolean; }) => Promise<{ base64: string; isBlur?: boolean; }>",
192
+ "signature": "(options: { quality?: number; checkBlur?: boolean; }) => Promise<{ base64: string; confidence?: number; }>",
193
193
  "parameters": [
194
194
  {
195
195
  "name": "options",
@@ -197,7 +197,7 @@
197
197
  "type": "{ quality?: number | undefined; checkBlur?: boolean | undefined; }"
198
198
  }
199
199
  ],
200
- "returns": "Promise<{ base64: string; isBlur?: boolean | undefined; }>",
200
+ "returns": "Promise<{ base64: string; confidence?: number | undefined; }>",
201
201
  "tags": [],
202
202
  "docs": "take a snapshot as base64.",
203
203
  "complexTypes": [],
@@ -249,7 +249,7 @@
249
249
  },
250
250
  {
251
251
  "name": "takePhoto",
252
- "signature": "(options: { pathToSave?: string; includeBase64?: boolean; }) => Promise<{ path?: string; base64?: string; blob?: Blob; isBlur?: boolean; }>",
252
+ "signature": "(options: { pathToSave?: string; includeBase64?: boolean; }) => Promise<{ path?: string; base64?: string; blob?: Blob; confidence?: number; }>",
253
253
  "parameters": [
254
254
  {
255
255
  "name": "options",
@@ -257,7 +257,7 @@
257
257
  "type": "{ pathToSave?: string | undefined; includeBase64?: boolean | undefined; }"
258
258
  }
259
259
  ],
260
- "returns": "Promise<{ path?: string | undefined; base64?: string | undefined; blob?: any; isBlur?: boolean | undefined; }>",
260
+ "returns": "Promise<{ path?: string | undefined; base64?: string | undefined; blob?: any; confidence?: number | undefined; }>",
261
261
  "tags": [],
262
262
  "docs": "",
263
263
  "complexTypes": [
@@ -46,7 +46,7 @@ export interface CameraPreviewPlugin {
46
46
  checkBlur?: boolean;
47
47
  }): Promise<{
48
48
  base64: string;
49
- isBlur?: boolean;
49
+ confidence?: number;
50
50
  }>;
51
51
  /**
52
52
  * analyze an image for blur detection with detailed confidence scores.
@@ -80,7 +80,7 @@ export interface CameraPreviewPlugin {
80
80
  path?: string;
81
81
  base64?: string;
82
82
  blob?: Blob;
83
- isBlur?: boolean;
83
+ confidence?: number;
84
84
  }>;
85
85
  toggleTorch(options: {
86
86
  on: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AA2EA,MAAM,CAAN,IAAY,cAOX;AAPD,WAAY,cAAc;IACxB,yEAAmB,CAAA;IACnB,yEAAmB,CAAA;IACnB,yEAAmB,CAAA;IACnB,2EAAoB,CAAA;IACpB,qEAAiB,CAAA;IACjB,qEAAiB,CAAA;AACnB,CAAC,EAPW,cAAc,KAAd,cAAc,QAOzB","sourcesContent":["import { PluginListenerHandle } from \"@capacitor/core\";\n\nexport interface CameraPreviewPlugin {\n initialize(options?: { quality?: number }): Promise<void>;\n getResolution(): Promise<{resolution: string}>;\n setResolution(options: {resolution: number}): Promise<void>;\n getAllCameras(): Promise<{cameras: string[]}>;\n getSelectedCamera(): Promise<{selectedCamera: string}>;\n selectCamera(options: {cameraID: string; }): Promise<void>;\n setScanRegion(options: {region:ScanRegion}): Promise<void>;\n setZoom(options: {factor: number}): Promise<void>;\n setFocus(options: {x: number, y: number}): Promise<void>;\n /**\n * Web Only\n */\n setDefaultUIElementURL(url:string): Promise<void>;\n /**\n * Web Only\n */\n setElement(ele:HTMLElement): Promise<void>;\n startCamera(): Promise<void>;\n stopCamera(): Promise<void>;\n /**\n * take a snapshot as base64.\n */\n takeSnapshot(options:{quality?:number, checkBlur?:boolean}): Promise<{base64:string, isBlur?: boolean}>;\n /**\n * analyze an image for blur detection with detailed confidence scores.\n */\n detectBlur(options:{image: string}): Promise<{isBlur: boolean, blurConfidence: number, sharpConfidence: number}>;\n /**\n * save a frame internally. Android and iOS only.\n */\n saveFrame(): Promise<{success:boolean}>;\n /**\n * take a snapshot on to a canvas. Web Only\n */\n takeSnapshot2(options:{canvas:HTMLCanvasElement,maxLength?:number}): Promise<{scaleRatio?:number}>;\n takePhoto(options: {pathToSave?:string,includeBase64?: boolean}): Promise<{path?:string,base64?:string,blob?:Blob, isBlur?: boolean}>;\n toggleTorch(options: {on: boolean}): Promise<void>;\n /**\n * get the orientation of the device.\n */\n getOrientation(): Promise<{\"orientation\":\"PORTRAIT\"|\"LANDSCAPE\"}>;\n startRecording(): Promise<void>;\n stopRecording(options:{includeBase64?:boolean}): Promise<{path?:string,base64?:string,blob?:Blob}>;\n setLayout(options: {top: string, left:string, width:string, height:string}): Promise<void>;\n requestCameraPermission(): Promise<void>;\n requestMicroPhonePermission(): Promise<void>;\n isOpen():Promise<{isOpen:boolean}>;\n addListener(\n eventName: 'onPlayed',\n listenerFunc: onPlayedListener,\n ): Promise<PluginListenerHandle>;\n addListener(\n eventName: 'onOrientationChanged',\n listenerFunc: onOrientationChangedListener,\n ): Promise<PluginListenerHandle>;\n removeAllListeners(): Promise<void>;\n}\n\nexport type onPlayedListener = (result:{resolution:string}) => void;\nexport type onOrientationChangedListener = () => void;\n\n/**\n * measuredByPercentage: 0 in pixel, 1 in percent\n */\nexport interface ScanRegion{\n left: number;\n top: number;\n right: number;\n bottom: number;\n measuredByPercentage: number;\n}\n\nexport enum EnumResolution {\n RESOLUTION_AUTO = 0,\n RESOLUTION_480P = 1,\n RESOLUTION_720P = 2,\n RESOLUTION_1080P = 3,\n RESOLUTION_2K = 4,\n RESOLUTION_4K = 5\n}\n"]}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AA2EA,MAAM,CAAN,IAAY,cAOX;AAPD,WAAY,cAAc;IACxB,yEAAmB,CAAA;IACnB,yEAAmB,CAAA;IACnB,yEAAmB,CAAA;IACnB,2EAAoB,CAAA;IACpB,qEAAiB,CAAA;IACjB,qEAAiB,CAAA;AACnB,CAAC,EAPW,cAAc,KAAd,cAAc,QAOzB","sourcesContent":["import { PluginListenerHandle } from \"@capacitor/core\";\n\nexport interface CameraPreviewPlugin {\n initialize(options?: { quality?: number }): Promise<void>;\n getResolution(): Promise<{resolution: string}>;\n setResolution(options: {resolution: number}): Promise<void>;\n getAllCameras(): Promise<{cameras: string[]}>;\n getSelectedCamera(): Promise<{selectedCamera: string}>;\n selectCamera(options: {cameraID: string; }): Promise<void>;\n setScanRegion(options: {region:ScanRegion}): Promise<void>;\n setZoom(options: {factor: number}): Promise<void>;\n setFocus(options: {x: number, y: number}): Promise<void>;\n /**\n * Web Only\n */\n setDefaultUIElementURL(url:string): Promise<void>;\n /**\n * Web Only\n */\n setElement(ele:HTMLElement): Promise<void>;\n startCamera(): Promise<void>;\n stopCamera(): Promise<void>;\n /**\n * take a snapshot as base64.\n */\n takeSnapshot(options:{quality?:number, checkBlur?:boolean}): Promise<{base64:string, confidence?: number}>;\n /**\n * analyze an image for blur detection with detailed confidence scores.\n */\n detectBlur(options:{image: string}): Promise<{isBlur: boolean, blurConfidence: number, sharpConfidence: number}>;\n /**\n * save a frame internally. Android and iOS only.\n */\n saveFrame(): Promise<{success:boolean}>;\n /**\n * take a snapshot on to a canvas. Web Only\n */\n takeSnapshot2(options:{canvas:HTMLCanvasElement,maxLength?:number}): Promise<{scaleRatio?:number}>;\n takePhoto(options: {pathToSave?:string,includeBase64?: boolean}): Promise<{path?:string,base64?:string,blob?:Blob, confidence?: number}>;\n toggleTorch(options: {on: boolean}): Promise<void>;\n /**\n * get the orientation of the device.\n */\n getOrientation(): Promise<{\"orientation\":\"PORTRAIT\"|\"LANDSCAPE\"}>;\n startRecording(): Promise<void>;\n stopRecording(options:{includeBase64?:boolean}): Promise<{path?:string,base64?:string,blob?:Blob}>;\n setLayout(options: {top: string, left:string, width:string, height:string}): Promise<void>;\n requestCameraPermission(): Promise<void>;\n requestMicroPhonePermission(): Promise<void>;\n isOpen():Promise<{isOpen:boolean}>;\n addListener(\n eventName: 'onPlayed',\n listenerFunc: onPlayedListener,\n ): Promise<PluginListenerHandle>;\n addListener(\n eventName: 'onOrientationChanged',\n listenerFunc: onOrientationChangedListener,\n ): Promise<PluginListenerHandle>;\n removeAllListeners(): Promise<void>;\n}\n\nexport type onPlayedListener = (result:{resolution:string}) => void;\nexport type onOrientationChangedListener = () => void;\n\n/**\n * measuredByPercentage: 0 in pixel, 1 in percent\n */\nexport interface ScanRegion{\n left: number;\n top: number;\n right: number;\n bottom: number;\n measuredByPercentage: number;\n}\n\nexport enum EnumResolution {\n RESOLUTION_AUTO = 0,\n RESOLUTION_480P = 1,\n RESOLUTION_720P = 2,\n RESOLUTION_1080P = 3,\n RESOLUTION_2K = 4,\n RESOLUTION_4K = 5\n}\n"]}
package/dist/esm/web.d.ts CHANGED
@@ -58,7 +58,7 @@ export declare class CameraPreviewWeb extends WebPlugin implements CameraPreview
58
58
  checkBlur?: boolean;
59
59
  }): Promise<{
60
60
  base64: string;
61
- isBlur?: boolean;
61
+ confidence?: number;
62
62
  }>;
63
63
  detectBlur(options: {
64
64
  image: string;
package/dist/esm/web.js CHANGED
@@ -257,7 +257,7 @@ export class CameraPreviewWeb extends WebPlugin {
257
257
  const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);
258
258
  return {
259
259
  base64: base64,
260
- isBlur: blurResult.blurScore < 150
260
+ confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))
261
261
  };
262
262
  }
263
263
  }
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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AK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAC1I,CAAC;gBAEF,8DAA8D;gBAC9D,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oBAC5C,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;oBACvC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAE7D,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAC;gBAClC,KAAK,EAAE,CAAC;aACT;SACF;QAED,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;CACF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer, PlayCallbackInfo } from 'dynamsoft-camera-enhancer';\nimport { CameraPreviewPlugin, EnumResolution, ScanRegion } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\n\nexport class CameraPreviewWeb extends WebPlugin implements CameraPreviewPlugin {\n private camera:CameraEnhancer | undefined;\n private container:HTMLElement | undefined;\n private region:ScanRegion | undefined;\n private recorder:RecordRTC | null | undefined;\n private hasMicrophone: boolean = false;\n async setDefaultUIElementURL(url: string): Promise<void> {\n CameraEnhancer.defaultUIElementURL = url;\n }\n\n async setElement(ele: HTMLElement): Promise<void> {\n this.container = ele;\n }\n\n saveFrame(): Promise<{ success: boolean; }> {\n throw new Error('Method not implemented.');\n }\n\n async getOrientation(): Promise<{\"orientation\":\"PORTRAIT\"|\"LANDSCAPE\"}> {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return {orientation:\"PORTRAIT\"};\n }else{\n return {orientation:\"LANDSCAPE\"};\n }\n }\n\n private desiredJpegQuality: number = 0.95; // Default to high quality (0.0-1.0)\n\n async initialize(options?: { quality?: number }): Promise<void> {\n // Get quality parameter from initialization, default to 95% if not specified\n if (options?.quality !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n \n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo:PlayCallbackInfo) => {\n this.notifyListeners(\"onPlayed\", {resolution:playCallBackInfo.width+\"x\"+playCallBackInfo.height});\n try {\n let canvas = this.camera!.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n } catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }else{\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n })\n }\n\n async getResolution(): Promise<{ resolution: string; }> {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution:string = rsl[0] + \"x\" + rsl[1];\n return {resolution: resolution};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async setResolution(options: { resolution: number; }): Promise<void> {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P){\n width = 640;\n height = 480;\n } else if (res == EnumResolution.RESOLUTION_720P){\n width = 1280;\n height = 720;\n } else if (res == EnumResolution.RESOLUTION_1080P){\n width = 1920;\n height = 1080;\n } else if (res == EnumResolution.RESOLUTION_2K){\n width = 2560;\n height = 1440;\n } else if (res == EnumResolution.RESOLUTION_4K){\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width,height);\n return;\n } else {\n throw new Error('Camera not initialized');\n }\n }\n\n async getAllCameras(): Promise<{ cameras: string[]; }> {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels:string[] = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return {cameras:labels};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async getSelectedCamera(): Promise<{ selectedCamera: string; }> {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return {selectedCamera:cameraInfo.label};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async selectCamera(options: { cameraID: string; }): Promise<void> {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras()\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async setScanRegion(options: { region: ScanRegion; }): Promise<void> {\n if (this.camera){\n this.region = options.region;\n this.applyScanRegion();\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n applyScanRegion(){\n if (this.camera && this.region){\n this.camera.setScanRegion({\n regionLeft:this.region.left,\n regionTop:this.region.top,\n regionRight:this.region.right,\n regionBottom:this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n\n async setZoom(options: { factor: number; }): Promise<void> {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async setFocus(options: {x: number, y: number}): Promise<void> {\n if (this.camera) {\n this.camera.setFocus({\n mode:\"manual\",\n area:{\n centerPoint:{x:options.x.toString(),y:options.y.toString()}\n }\n });\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async toggleTorch(options: { on: boolean; }): Promise<void> {\n if (this.camera) {\n try{\n if (options[\"on\"]){\n await this.camera.turnOnTorch();\n }else{\n await this.camera.turnOffTorch();\n }\n } catch (e){\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n\n async startCamera(): Promise<void> {\n if (this.camera) {\n await this.camera?.open(true);\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n await this.camera?.setZoom(1.001);\n await this.camera?.setZoom(1.0);\n }\n setTimeout(resetZoom,500);\n }\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n isSafari():boolean{\n const u = navigator.userAgent.toLowerCase()\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }else{\n return false;\n }\n }\n\n async stopCamera(): Promise<void> {\n if (this.camera) {\n this.camera.close(true);\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async isOpen(): Promise<{isOpen:boolean}> {\n if (this.camera) {\n return {isOpen:this.camera.isOpen()};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async takeSnapshot(options:{quality?:number, checkBlur?:boolean}): Promise<{ base64: string, isBlur?: boolean }> {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if (options?.quality !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\",\"\");\n \n // Only perform blur detection if checkBlur option is true\n if (options?.checkBlur === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n isBlur: blurResult.blurScore < 150\n };\n }\n }\n \n return {base64: base64};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async detectBlur(options: {image: string}): Promise<{isBlur: boolean, blurConfidence: number, sharpConfidence: number}> {\n try {\n // Create image element from base64\n const img = new Image();\n \n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n \n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n \n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n \n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n \n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n \n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n } catch (error) {\n reject(error);\n }\n };\n \n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n \n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n } else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n } catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n\n async takeSnapshot2(options:{canvas:HTMLCanvasElement,maxLength?:number}): Promise<{scaleRatio?:number}> {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength/width*height;\n scaleRatio = options.maxLength/width;\n }else{\n targetHeight = options.maxLength;\n targetWidth = options.maxLength/height*width;\n scaleRatio = options.maxLength/height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }else{\n this.drawFullFrame(canvas);\n }\n }else{\n this.drawFullFrame(canvas);\n }\n return {scaleRatio:scaleRatio};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n drawFullFrame(canvas:HTMLCanvasElement):HTMLCanvasElement{\n let video = this.camera?.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n\n async takePhoto(_options:{includeBase64?:boolean}): Promise<{ path?:string, base64?: string, blob?:Blob, blurScore?: number }> {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream:MediaStream = video.srcObject as MediaStream;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture:any = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return {blob:blob}; \n } catch (error) {\n console.log(error);\n }\n }else{\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion(\n {\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n }\n )\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n \n // Add blur detection if base64 is included\n if (_options?.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n \n return {base64:base64};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n removeDataURLHead(dataURL:string){\n return dataURL.substring(dataURL.indexOf(\",\")+1,dataURL.length);\n }\n\n\n async requestCameraPermission(): Promise<void> {\n const constraints = {video: true, audio: false};\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i=0;i<tracks.length;i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n\n async requestMicroPhonePermission(): Promise<void> {\n try {\n const constraints = {video: false, audio: true};\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i=0;i<tracks.length;i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n } catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n\n async startRecording(): Promise<void> {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject as MediaStream, {\n type: 'video'\n });\n this.recorder.startRecording();\n }else{\n throw new Error(\"camera not initialized\");\n }\n }\n\n async stopRecording(): Promise<{blob:Blob}> {\n return new Promise<{blob:Blob}>((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder!.getBlob();\n this.recorder!.destroy();\n this.recorder = null;\n resolve({blob})\n }\n this.recorder.stopRecording(stopRecordingCallback);\n }else{\n reject(\"recorder not initialized\");\n }\n }) \n }\n\n async setLayout(options: {top: string,left:string,width:string, height:string}): Promise<void> {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }else{\n throw new Error(\"Camera not initialized\");\n }\n }\n\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n private detectBlurWeb(imageData: ImageData, width: number, height: number): { blurScore: number } {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n \n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n \n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n \n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y-1) * width + (x-1)) * 4] + 0.587 * data[((y-1) * width + (x-1)) * 4 + 1] + 0.114 * data[((y-1) * width + (x-1)) * 4 + 2],\n 0.299 * data[((y-1) * width + x) * 4] + 0.587 * data[((y-1) * width + x) * 4 + 1] + 0.114 * data[((y-1) * width + x) * 4 + 2],\n 0.299 * data[((y-1) * width + (x+1)) * 4] + 0.587 * data[((y-1) * width + (x+1)) * 4 + 1] + 0.114 * data[((y-1) * width + (x+1)) * 4 + 2],\n 0.299 * data[(y * width + (x-1)) * 4] + 0.587 * data[(y * width + (x-1)) * 4 + 1] + 0.114 * data[(y * width + (x-1)) * 4 + 2],\n 0.299 * data[(y * width + (x+1)) * 4] + 0.587 * data[(y * width + (x+1)) * 4 + 1] + 0.114 * data[(y * width + (x+1)) * 4 + 2],\n 0.299 * data[((y+1) * width + (x-1)) * 4] + 0.587 * data[((y+1) * width + (x-1)) * 4 + 1] + 0.114 * data[((y+1) * width + (x-1)) * 4 + 2],\n 0.299 * data[((y+1) * width + x) * 4] + 0.587 * data[((y+1) * width + x) * 4 + 1] + 0.114 * data[((y+1) * width + x) * 4 + 2],\n 0.299 * data[((y+1) * width + (x+1)) * 4] + 0.587 * data[((y+1) * width + (x+1)) * 4 + 1] + 0.114 * data[((y+1) * width + (x+1)) * 4 + 2]\n ];\n \n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n \n variance += laplacian * laplacian;\n count++;\n }\n }\n \n const blurScore = count > 0 ? variance / count : 0;\n \n return { blurScore };\n }\n}\n"]}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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AC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAC1I,CAAC;gBAEF,8DAA8D;gBAC9D,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oBAC5C,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;oBACvC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAE7D,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAC;gBAClC,KAAK,EAAE,CAAC;aACT;SACF;QAED,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;CACF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer, PlayCallbackInfo } from 'dynamsoft-camera-enhancer';\nimport { CameraPreviewPlugin, EnumResolution, ScanRegion } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\n\nexport class CameraPreviewWeb extends WebPlugin implements CameraPreviewPlugin {\n private camera:CameraEnhancer | undefined;\n private container:HTMLElement | undefined;\n private region:ScanRegion | undefined;\n private recorder:RecordRTC | null | undefined;\n private hasMicrophone: boolean = false;\n async setDefaultUIElementURL(url: string): Promise<void> {\n CameraEnhancer.defaultUIElementURL = url;\n }\n\n async setElement(ele: HTMLElement): Promise<void> {\n this.container = ele;\n }\n\n saveFrame(): Promise<{ success: boolean; }> {\n throw new Error('Method not implemented.');\n }\n\n async getOrientation(): Promise<{\"orientation\":\"PORTRAIT\"|\"LANDSCAPE\"}> {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return {orientation:\"PORTRAIT\"};\n }else{\n return {orientation:\"LANDSCAPE\"};\n }\n }\n\n private desiredJpegQuality: number = 0.95; // Default to high quality (0.0-1.0)\n\n async initialize(options?: { quality?: number }): Promise<void> {\n // Get quality parameter from initialization, default to 95% if not specified\n if (options?.quality !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n \n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo:PlayCallbackInfo) => {\n this.notifyListeners(\"onPlayed\", {resolution:playCallBackInfo.width+\"x\"+playCallBackInfo.height});\n try {\n let canvas = this.camera!.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n } catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }else{\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n })\n }\n\n async getResolution(): Promise<{ resolution: string; }> {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution:string = rsl[0] + \"x\" + rsl[1];\n return {resolution: resolution};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async setResolution(options: { resolution: number; }): Promise<void> {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P){\n width = 640;\n height = 480;\n } else if (res == EnumResolution.RESOLUTION_720P){\n width = 1280;\n height = 720;\n } else if (res == EnumResolution.RESOLUTION_1080P){\n width = 1920;\n height = 1080;\n } else if (res == EnumResolution.RESOLUTION_2K){\n width = 2560;\n height = 1440;\n } else if (res == EnumResolution.RESOLUTION_4K){\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width,height);\n return;\n } else {\n throw new Error('Camera not initialized');\n }\n }\n\n async getAllCameras(): Promise<{ cameras: string[]; }> {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels:string[] = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return {cameras:labels};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async getSelectedCamera(): Promise<{ selectedCamera: string; }> {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return {selectedCamera:cameraInfo.label};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async selectCamera(options: { cameraID: string; }): Promise<void> {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras()\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async setScanRegion(options: { region: ScanRegion; }): Promise<void> {\n if (this.camera){\n this.region = options.region;\n this.applyScanRegion();\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n applyScanRegion(){\n if (this.camera && this.region){\n this.camera.setScanRegion({\n regionLeft:this.region.left,\n regionTop:this.region.top,\n regionRight:this.region.right,\n regionBottom:this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n\n async setZoom(options: { factor: number; }): Promise<void> {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async setFocus(options: {x: number, y: number}): Promise<void> {\n if (this.camera) {\n this.camera.setFocus({\n mode:\"manual\",\n area:{\n centerPoint:{x:options.x.toString(),y:options.y.toString()}\n }\n });\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async toggleTorch(options: { on: boolean; }): Promise<void> {\n if (this.camera) {\n try{\n if (options[\"on\"]){\n await this.camera.turnOnTorch();\n }else{\n await this.camera.turnOffTorch();\n }\n } catch (e){\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n\n async startCamera(): Promise<void> {\n if (this.camera) {\n await this.camera?.open(true);\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n await this.camera?.setZoom(1.001);\n await this.camera?.setZoom(1.0);\n }\n setTimeout(resetZoom,500);\n }\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n isSafari():boolean{\n const u = navigator.userAgent.toLowerCase()\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }else{\n return false;\n }\n }\n\n async stopCamera(): Promise<void> {\n if (this.camera) {\n this.camera.close(true);\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async isOpen(): Promise<{isOpen:boolean}> {\n if (this.camera) {\n return {isOpen:this.camera.isOpen()};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async takeSnapshot(options:{quality?:number, checkBlur?:boolean}): Promise<{ base64: string, confidence?: number }> {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if (options?.quality !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\",\"\");\n \n // Only perform blur detection if checkBlur option is true\n if (options?.checkBlur === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))\n };\n }\n }\n \n return {base64: base64};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async detectBlur(options: {image: string}): Promise<{isBlur: boolean, blurConfidence: number, sharpConfidence: number}> {\n try {\n // Create image element from base64\n const img = new Image();\n \n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n \n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n \n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n \n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n \n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n \n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n } catch (error) {\n reject(error);\n }\n };\n \n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n \n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n } else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n } catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n\n async takeSnapshot2(options:{canvas:HTMLCanvasElement,maxLength?:number}): Promise<{scaleRatio?:number}> {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength/width*height;\n scaleRatio = options.maxLength/width;\n }else{\n targetHeight = options.maxLength;\n targetWidth = options.maxLength/height*width;\n scaleRatio = options.maxLength/height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }else{\n this.drawFullFrame(canvas);\n }\n }else{\n this.drawFullFrame(canvas);\n }\n return {scaleRatio:scaleRatio};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n drawFullFrame(canvas:HTMLCanvasElement):HTMLCanvasElement{\n let video = this.camera?.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n\n async takePhoto(_options:{includeBase64?:boolean}): Promise<{ path?:string, base64?: string, blob?:Blob, blurScore?: number }> {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream:MediaStream = video.srcObject as MediaStream;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture:any = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return {blob:blob}; \n } catch (error) {\n console.log(error);\n }\n }else{\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion(\n {\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n }\n )\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n \n // Add blur detection if base64 is included\n if (_options?.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n \n return {base64:base64};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n removeDataURLHead(dataURL:string){\n return dataURL.substring(dataURL.indexOf(\",\")+1,dataURL.length);\n }\n\n\n async requestCameraPermission(): Promise<void> {\n const constraints = {video: true, audio: false};\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i=0;i<tracks.length;i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n\n async requestMicroPhonePermission(): Promise<void> {\n try {\n const constraints = {video: false, audio: true};\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i=0;i<tracks.length;i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n } catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n\n async startRecording(): Promise<void> {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject as MediaStream, {\n type: 'video'\n });\n this.recorder.startRecording();\n }else{\n throw new Error(\"camera not initialized\");\n }\n }\n\n async stopRecording(): Promise<{blob:Blob}> {\n return new Promise<{blob:Blob}>((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder!.getBlob();\n this.recorder!.destroy();\n this.recorder = null;\n resolve({blob})\n }\n this.recorder.stopRecording(stopRecordingCallback);\n }else{\n reject(\"recorder not initialized\");\n }\n }) \n }\n\n async setLayout(options: {top: string,left:string,width:string, height:string}): Promise<void> {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }else{\n throw new Error(\"Camera not initialized\");\n }\n }\n\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n private detectBlurWeb(imageData: ImageData, width: number, height: number): { blurScore: number } {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n \n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n \n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n \n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y-1) * width + (x-1)) * 4] + 0.587 * data[((y-1) * width + (x-1)) * 4 + 1] + 0.114 * data[((y-1) * width + (x-1)) * 4 + 2],\n 0.299 * data[((y-1) * width + x) * 4] + 0.587 * data[((y-1) * width + x) * 4 + 1] + 0.114 * data[((y-1) * width + x) * 4 + 2],\n 0.299 * data[((y-1) * width + (x+1)) * 4] + 0.587 * data[((y-1) * width + (x+1)) * 4 + 1] + 0.114 * data[((y-1) * width + (x+1)) * 4 + 2],\n 0.299 * data[(y * width + (x-1)) * 4] + 0.587 * data[(y * width + (x-1)) * 4 + 1] + 0.114 * data[(y * width + (x-1)) * 4 + 2],\n 0.299 * data[(y * width + (x+1)) * 4] + 0.587 * data[(y * width + (x+1)) * 4 + 1] + 0.114 * data[(y * width + (x+1)) * 4 + 2],\n 0.299 * data[((y+1) * width + (x-1)) * 4] + 0.587 * data[((y+1) * width + (x-1)) * 4 + 1] + 0.114 * data[((y+1) * width + (x-1)) * 4 + 2],\n 0.299 * data[((y+1) * width + x) * 4] + 0.587 * data[((y+1) * width + x) * 4 + 1] + 0.114 * data[((y+1) * width + x) * 4 + 2],\n 0.299 * data[((y+1) * width + (x+1)) * 4] + 0.587 * data[((y+1) * width + (x+1)) * 4 + 1] + 0.114 * data[((y+1) * width + (x+1)) * 4 + 2]\n ];\n \n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n \n variance += laplacian * laplacian;\n count++;\n }\n }\n \n const blurScore = count > 0 ? variance / count : 0;\n \n return { blurScore };\n }\n}\n"]}
@@ -273,7 +273,7 @@ class CameraPreviewWeb extends core.WebPlugin {
273
273
  const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);
274
274
  return {
275
275
  base64: base64,
276
- isBlur: blurResult.blurScore < 150
276
+ confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))
277
277
  };
278
278
  }
279
279
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n this.desiredJpegQuality = 0.95; // Default to high quality (0.0-1.0)\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize(options) {\n // Get quality parameter from initialization, default to 95% if not specified\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n // Only perform blur detection if checkBlur option is true\n if ((options === null || options === void 0 ? void 0 : options.checkBlur) === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n isBlur: blurResult.blurScore < 150\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async detectBlur(options) {\n try {\n // Create image element from base64\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n }\n catch (error) {\n reject(error);\n }\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n }\n else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n }\n catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n // Add blur detection if base64 is included\n if (_options === null || _options === void 0 ? void 0 : _options.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n detectBlurWeb(imageData, width, height) {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y - 1) * width + (x - 1)) * 4] + 0.587 * data[((y - 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y - 1) * width + x) * 4] + 0.587 * data[((y - 1) * width + x) * 4 + 1] + 0.114 * data[((y - 1) * width + x) * 4 + 2],\n 0.299 * data[((y - 1) * width + (x + 1)) * 4] + 0.587 * data[((y - 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x + 1)) * 4 + 2],\n 0.299 * data[(y * width + (x - 1)) * 4] + 0.587 * data[(y * width + (x - 1)) * 4 + 1] + 0.114 * data[(y * width + (x - 1)) * 4 + 2],\n 0.299 * data[(y * width + (x + 1)) * 4] + 0.587 * data[(y * width + (x + 1)) * 4 + 1] + 0.114 * data[(y * width + (x + 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x - 1)) * 4] + 0.587 * data[((y + 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + x) * 4] + 0.587 * data[((y + 1) * width + x) * 4 + 1] + 0.114 * data[((y + 1) * width + x) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x + 1)) * 4] + 0.587 * data[((y + 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x + 1)) * 4 + 2]\n ];\n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n variance += laplacian * laplacian;\n count++;\n }\n }\n const blurScore = count > 0 ? variance / count : 0;\n return { blurScore };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin"],"mappings":"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AK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACxK,iBAAiB;AACjB;AACA,gBAAgB,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC7E,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;AAC3D,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC/D,gBAAgB,QAAQ,IAAI,SAAS,GAAG,SAAS;AACjD,gBAAgB,KAAK,EAAE;AACvB;AACA;AACA,QAAQ,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,CAAC;AAC1D,QAAQ,OAAO,EAAE,SAAS,EAAE;AAC5B;AACA;;;;;;;;;"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n this.desiredJpegQuality = 0.95; // Default to high quality (0.0-1.0)\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize(options) {\n // Get quality parameter from initialization, default to 95% if not specified\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n // Only perform blur detection if checkBlur option is true\n if ((options === null || options === void 0 ? void 0 : options.checkBlur) === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async detectBlur(options) {\n try {\n // Create image element from base64\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n }\n catch (error) {\n reject(error);\n }\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n }\n else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n }\n catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n // Add blur detection if base64 is included\n if (_options === null || _options === void 0 ? void 0 : _options.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n detectBlurWeb(imageData, width, height) {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y - 1) * width + (x - 1)) * 4] + 0.587 * data[((y - 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y - 1) * width + x) * 4] + 0.587 * data[((y - 1) * width + x) * 4 + 1] + 0.114 * data[((y - 1) * width + x) * 4 + 2],\n 0.299 * data[((y - 1) * width + (x + 1)) * 4] + 0.587 * data[((y - 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x + 1)) * 4 + 2],\n 0.299 * data[(y * width + (x - 1)) * 4] + 0.587 * data[(y * width + (x - 1)) * 4 + 1] + 0.114 * data[(y * width + (x - 1)) * 4 + 2],\n 0.299 * data[(y * width + (x + 1)) * 4] + 0.587 * data[(y * width + (x + 1)) * 4 + 1] + 0.114 * data[(y * width + (x + 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x - 1)) * 4] + 0.587 * data[((y + 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + x) * 4] + 0.587 * data[((y + 1) * width + x) * 4 + 1] + 0.114 * data[((y + 1) * width + x) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x + 1)) * 4] + 0.587 * data[((y + 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x + 1)) * 4 + 2]\n ];\n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n variance += laplacian * laplacian;\n count++;\n }\n }\n const blurScore = count > 0 ? variance / count : 0;\n return { blurScore };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin"],"mappings":"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AG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACxK,iBAAiB;AACjB;AACA,gBAAgB,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC7E,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;AAC3D,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC/D,gBAAgB,QAAQ,IAAI,SAAS,GAAG,SAAS;AACjD,gBAAgB,KAAK,EAAE;AACvB;AACA;AACA,QAAQ,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,CAAC;AAC1D,QAAQ,OAAO,EAAE,SAAS,EAAE;AAC5B;AACA;;;;;;;;;"}
package/dist/plugin.js CHANGED
@@ -270,7 +270,7 @@ var capacitorCameraPreview = (function (exports, core, dynamsoftCameraEnhancer,
270
270
  const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);
271
271
  return {
272
272
  base64: base64,
273
- isBlur: blurResult.blurScore < 150
273
+ confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))
274
274
  };
275
275
  }
276
276
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n this.desiredJpegQuality = 0.95; // Default to high quality (0.0-1.0)\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize(options) {\n // Get quality parameter from initialization, default to 95% if not specified\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n // Only perform blur detection if checkBlur option is true\n if ((options === null || options === void 0 ? void 0 : options.checkBlur) === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n isBlur: blurResult.blurScore < 150\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async detectBlur(options) {\n try {\n // Create image element from base64\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n }\n catch (error) {\n reject(error);\n }\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n }\n else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n }\n catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n // Add blur detection if base64 is included\n if (_options === null || _options === void 0 ? void 0 : _options.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n detectBlurWeb(imageData, width, height) {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y - 1) * width + (x - 1)) * 4] + 0.587 * data[((y - 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y - 1) * width + x) * 4] + 0.587 * data[((y - 1) * width + x) * 4 + 1] + 0.114 * data[((y - 1) * width + x) * 4 + 2],\n 0.299 * data[((y - 1) * width + (x + 1)) * 4] + 0.587 * data[((y - 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x + 1)) * 4 + 2],\n 0.299 * data[(y * width + (x - 1)) * 4] + 0.587 * data[(y * width + (x - 1)) * 4 + 1] + 0.114 * data[(y * width + (x - 1)) * 4 + 2],\n 0.299 * data[(y * width + (x + 1)) * 4] + 0.587 * data[(y * width + (x + 1)) * 4 + 1] + 0.114 * data[(y * width + (x + 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x - 1)) * 4] + 0.587 * data[((y + 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + x) * 4] + 0.587 * data[((y + 1) * width + x) * 4 + 1] + 0.114 * data[((y + 1) * width + x) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x + 1)) * 4] + 0.587 * data[((y + 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x + 1)) * 4 + 2]\n ];\n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n variance += laplacian * laplacian;\n count++;\n }\n }\n const blurScore = count > 0 ? variance / count : 0;\n return { blurScore };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin"],"mappings":"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IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACxK,iBAAiB;IACjB;IACA,gBAAgB,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7E,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/D,gBAAgB,QAAQ,IAAI,SAAS,GAAG,SAAS;IACjD,gBAAgB,KAAK,EAAE;IACvB;IACA;IACA,QAAQ,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,CAAC;IAC1D,QAAQ,OAAO,EAAE,SAAS,EAAE;IAC5B;IACA;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n this.desiredJpegQuality = 0.95; // Default to high quality (0.0-1.0)\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize(options) {\n // Get quality parameter from initialization, default to 95% if not specified\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n // Only perform blur detection if checkBlur option is true\n if ((options === null || options === void 0 ? void 0 : options.checkBlur) === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async detectBlur(options) {\n try {\n // Create image element from base64\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n }\n catch (error) {\n reject(error);\n }\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n }\n else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n }\n catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n // Add blur detection if base64 is included\n if (_options === null || _options === void 0 ? void 0 : _options.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n detectBlurWeb(imageData, width, height) {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y - 1) * width + (x - 1)) * 4] + 0.587 * data[((y - 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y - 1) * width + x) * 4] + 0.587 * data[((y - 1) * width + x) * 4 + 1] + 0.114 * data[((y - 1) * width + x) * 4 + 2],\n 0.299 * data[((y - 1) * width + (x + 1)) * 4] + 0.587 * data[((y - 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x + 1)) * 4 + 2],\n 0.299 * data[(y * width + (x - 1)) * 4] + 0.587 * data[(y * width + (x - 1)) * 4 + 1] + 0.114 * data[(y * width + (x - 1)) * 4 + 2],\n 0.299 * data[(y * width + (x + 1)) * 4] + 0.587 * data[(y * width + (x + 1)) * 4 + 1] + 0.114 * data[(y * width + (x + 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x - 1)) * 4] + 0.587 * data[((y + 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + x) * 4] + 0.587 * data[((y + 1) * width + x) * 4 + 1] + 0.114 * data[((y + 1) * width + x) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x + 1)) * 4] + 0.587 * data[((y + 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x + 1)) * 4 + 2]\n ];\n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n variance += laplacian * laplacian;\n count++;\n }\n }\n const blurScore = count > 0 ? variance / count : 0;\n return { blurScore };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin"],"mappings":"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CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACxK,iBAAiB;IACjB;IACA,gBAAgB,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7E,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/D,gBAAgB,QAAQ,IAAI,SAAS,GAAG,SAAS;IACjD,gBAAgB,KAAK,EAAE;IACvB;IACA;IACA,QAAQ,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,CAAC;IAC1D,QAAQ,OAAO,EAAE,SAAS,EAAE;IAC5B;IACA;;;;;;;;;;;;;;;"}
@@ -442,9 +442,10 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
442
442
  ret["base64"] = base64
443
443
 
444
444
  // Detect blur if base64 is included
445
- let isBlur = calculateBlurResult(image: image!)
446
- ret["isBlur"] = isBlur
447
- print("Blur detection - Label: \(isBlur ? "blur" : "sharp")")
445
+ // Detect blur if base64 is included
446
+ let confidence = calculateBlurConfidence(image: image!)
447
+ ret["confidence"] = confidence
448
+ print("Blur detection - Confidence: \(confidence)")
448
449
  }
449
450
  do {
450
451
 
@@ -512,9 +513,9 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
512
513
  // Only detect blur if checkBlur option is true
513
514
  let shouldCheckBlur = takeSnapshotCall.getBool("checkBlur", false)
514
515
  if shouldCheckBlur {
515
- let isBlur = calculateBlurResult(image: normalized)
516
- ret["isBlur"] = isBlur
517
- print("Blur detection - Label: \(isBlur ? "blur" : "sharp")")
516
+ let confidence = calculateBlurConfidence(image: normalized)
517
+ ret["confidence"] = confidence
518
+ print("Blur detection - Confidence: \(confidence)")
518
519
  } else {
519
520
  print("Blur detection disabled for performance")
520
521
  }
@@ -1302,6 +1303,24 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
1302
1303
  return laplacianScore < 50
1303
1304
  }
1304
1305
  }
1306
+
1307
+ /**
1308
+ * Calculate blur confidence score (0-1 where 1 is sharp, 0 is blurry)
1309
+ */
1310
+ private func calculateBlurConfidence(image: UIImage) -> Double {
1311
+ // Use TFLite model if available for detailed confidence
1312
+ if let helper = blurDetectionHelper, helper.getIsInitialized() {
1313
+ let result = helper.detectBlurWithConfidence(image: image)
1314
+ if let blurConfidence = result["blurConfidence"] as? Double {
1315
+ return blurConfidence
1316
+ }
1317
+ }
1318
+
1319
+ // Fallback to Laplacian algorithm with confidence calculation
1320
+ let laplacianScore = calculateLaplacianBlurScore(image: image)
1321
+ // Normalize to 0-1 range (higher score = sharper image)
1322
+ return max(0.0, min(1.0, laplacianScore / 300.0))
1323
+ }
1305
1324
 
1306
1325
  // Original Laplacian blur detection (fallback)
1307
1326
  private func calculateLaplacianBlurScore(image: UIImage) -> Double {
File without changes
File without changes
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "capacitor-plugin-camera-forked",
3
- "version": "3.0.113",
3
+ "version": "3.0.120",
4
4
  "description": "A capacitor camera plugin - A custom Capacitor camera plugin with additional features.",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",