@spoonconsulting/cordova-plugin-simple-camera-preview
Version:
Cordova plugin that allows camera interaction from HTML code for showing camera preview below or on top of the HTML.
195 lines (144 loc) • 4.24 kB
Markdown
Cordova Plugin Simple Camera Preview
====================
Cordova plugin that allows simple camera preview and taking pictures from Javascript and HTML
# Installation
```
cordova plugin add https://github.com/spoonconsulting/cordova-plugin-simple-camera-preview.git
ionic cordova plugin add https://github.com/spoonconsulting/cordova-plugin-simple-camera-preview.git
```
Make the webview html background color transparent.
```css
html, body, .ion-app, .ion-content {
background-color: transparent;
}
```
for newer version ionic use the following:
```css
html, body, .ion-app, .ion-content {
--background: transparent;
}
```
Make sure to set up the camera size as follows:
```javascript
const aspectRatio = 3/4; // or 9/16
const cameraSize = this.getCameraSize(aspectRatio);
getCameraSize(aspectRatio) {
let height;
let width;
const ratio = 4 / 3;
const min = Math.min(window.innerWidth, window.innerHeight);
[width, height] = [min, Math.round(min / aspectRatio)];
if (this.isLandscape()) {
[width, height] = [height, width];
}
return {
x: (window.innerWidth - width) / 2,
y: (window.innerHeight - height) / 2,
width,
height,
};
}
isLandscape() {
return Math.abs(window.orientation % 180) === 90;
}
```
### Android
Uses Google's CameraX API
# Methods
### enable(options, successCallback, errorCallback)
Starts the camera preview instance.
<br>
```javascript
const params = {
targetSize: 1024,
lens: 'auto', // Camera lens (auto or wide). Default is auto.
direction: 'back', // Camera direction (front or back). Default is back.
aspectRatio: '3:4', // Camera aspect ratoio (3:4 or 9:16). Default is 3:4.
...cameraSize,
}
SimpleCameraPreview.enable(params, () => {
console.log("Camera enabled");
});
```
### disable(successCallback, errorCallback)
<info>Stops the camera preview instance.</info><br/>
```javascript
SimpleCameraPreview.disable(params, () => {
console.log("Camera disabled");
});
```
### capture(options, successCallback, errorCallback)
<info>Take the picture</info><br>
```javascript
let options = {
flash: true,
};
SimpleCameraPreview.capture(options, (imagaeNativePath) => {
console.log(imagaeNativePath);
});
```
### setSize(options, successCallback, errorCallback)
Set the camera frame size
<br>
```javascript
let size = {
x: 0,
y: 0,
width: 1080,
height: 1920,
};
SimpleCameraPreview.setSize(size, () => {
console.log("Camera frame size set");
});
```
### deviceHasUltraWideCamera(successCallback, errorCallback)
Check if device has ultra-wide camera
<br>
```javascript
SimpleCameraPreview.deviceHasUltraWideCamera(size, (value: boolean) => {
console.log("Device has ultra-wide camera?: ", value);
});
```
### deviceHasFrontCamera(successCallback, errorCallback)
Check if device has front camera
<br>
```javascript
SimpleCameraPreview.deviceHasFrontCamera((value) => {
console.log("Device has front camera?: ", value);
},
(error) => {
console.error("Error: ", error);
});
```
### switchCameraTo(options, successCallback, errorCallback)
Switch camera between wide or auto and set the camera direction (front or back) dynamically. Change camera aspect ratio.
The options variable can take the following keys:
#### Available options:
- **lens:**
- `"wide"` – Use a wide-angle lens.
- `"auto"` – Automatically select the best available lens.
- **direction:**
- `"front"` – Use the front-facing camera.
- `"back"` – Use the rear-facing camera.
- **aspectRatio:**
- `"3:4"` – Display 3/4 preview.
- `"9:16"` – Display 9/16 preview.
### Note:
Currently, the wide-angle lens functionality is not supported for the front-facing camera. If the `lens` is set to `"wide"` and the `direction` is set to `"front"`, the camera will default to the `"auto"` lens instead of switching to the wide lens.
```javascript
const params = {
lens: "wide",
direction: "back", // Specify camera direction
aspectRatio: "9:16",
...cameraSize,
};
SimpleCameraPreview.switchCameraTo(
params,
(value: unknown) => {
return (typeof value === "boolean" ? value : false);
},
(e: unknown) => {
console.log("cannot switch camera: ", e);
}
);
```