2020-10-21 23:03:18 +00:00
< h1 align = "center" >
2020-10-21 23:21:49 +00:00
🎈 React Native Camera Kit
2020-10-21 23:03:18 +00:00
< / h1 >
< p align = "center" >
A < strong > high performance, fully featured, rock solid< / strong > < br >
camera library for React Native applications
< / p >
< p align = "center" >
< a href = "https://github.com/teslamotors/react-native-camera-kit/blob/master/LICENSE" >
< img src = "https://img.shields.io/badge/license-MIT-blue.svg" alt = "React Native Camera Kit is released under the MIT license." / >
< / a >
< a href = "https://www.npmjs.org/package/react-native-camera-kit" >
< img src = "https://badge.fury.io/js/react-native-camera-kit.svg" alt = "Current npm package version." / >
< / a >
< / p >
2020-10-21 23:21:49 +00:00
< table >
< tr >
< td >
2020-12-07 06:42:16 +00:00
< img src = "images/screenshot.jpg" / >
2020-10-21 23:21:49 +00:00
< / td >
< td >
< ul >
< li > < h3 > Cross Platform (iOS and Android)< / h3 > < / li >
< li > < h3 > Optimized for performance and high photo capture rate< / h3 > < / li >
< li > < h3 > QR / Barcode scanning support< / h3 > < / li >
< li > < h3 > Camera preview support in iOS simulator< / h3 > < / li >
< / ul >
< / td >
< / tr >
< / table >
2016-08-01 13:05:55 +00:00
2020-10-21 23:54:15 +00:00
## Installation (RN > 0.60)
2020-10-21 23:21:49 +00:00
2017-04-10 19:47:35 +00:00
```bash
2020-10-22 00:03:44 +00:00
yarn add react-native-camera-kit
2017-04-10 19:47:35 +00:00
```
```bash
2020-10-21 23:03:18 +00:00
cd ios & & pod install & & cd ..
2017-04-10 19:47:35 +00:00
```
2021-02-25 18:07:48 +00:00
Android:
[Add Kotlin to your project ](./docs/kotlin.md )
2021-02-04 23:42:55 +00:00
## Permissions
#### Android
Add the following uses-permission to your `AndroidManifest.xml` (usually found at: `android/src/main/` )
```java
< uses-permission android:name = "android.permission.CAMERA" / >
< uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" / >
```
#### iOS
2021-02-23 18:07:42 +00:00
Add the following usage descriptions to your `Info.plist` (usually found at: `ios/PROJECT_NAME/` )
2021-02-04 23:42:55 +00:00
```xml
< key > NSCameraUsageDescription< / key >
< string > For taking photos< / string >
2021-02-23 18:07:42 +00:00
< key > NSPhotoLibraryUsageDescription< / key >
< string > For saving photos< / string >
2021-02-04 23:42:55 +00:00
```
2020-10-21 23:03:18 +00:00
## Running the example project
2018-03-01 14:26:56 +00:00
2020-10-21 23:03:18 +00:00
- `yarn bootstrap`
- `yarn example ios` or `yarn example android`
2018-03-01 14:26:56 +00:00
2021-01-06 00:06:42 +00:00
## Components
2016-04-18 09:40:16 +00:00
2021-01-06 00:06:42 +00:00
### CameraScreen
Full screen camera component that holds camera state and provides camera controls
2021-02-04 23:33:42 +00:00
```ts
2021-01-06 00:06:42 +00:00
import { CameraScreen } from 'react-native-camera-kit';
```
2021-02-04 23:33:42 +00:00
```tsx
2021-01-06 00:06:42 +00:00
< CameraScreen
actions={{ rightButtonText: 'Done', leftButtonText: 'Cancel' }}
onBottomButtonPressed={(event) => this.onBottomButtonPressed(event)}
flashImages={{
2021-02-23 18:07:42 +00:00
// optional, images for flash state
2021-01-06 00:06:42 +00:00
on: require('path/to/image'),
off: require('path/to/image'),
auto: require('path/to/image'),
}}
2021-02-23 18:07:42 +00:00
cameraFlipImage={require('path/to/image')} // optional, image for flipping camera button
captureButtonImage={require('path/to/image')} // optional, image capture button
torchOnImage={require('path/to/image')} // optional, image for toggling on flash light
torchOffImage={require('path/to/image')} // optional, image for toggling off flash light
2021-01-11 19:16:40 +00:00
hideControls={false} // (default false) optional, hides camera controls
2021-01-06 00:38:30 +00:00
showCapturedImageCount={false} // (default false) optional, show count for photos taken during that capture session
2021-01-06 00:06:42 +00:00
/>
```
#### Barcode / QR Code Scanning
Additionally, the camera screen can be used for barcode scanning
2021-02-04 23:33:42 +00:00
```tsx
2021-01-06 00:06:42 +00:00
< CameraScreen
...
// Barcode props
scanBarcode={true}
2021-02-04 23:42:55 +00:00
onReadCode={(event) => Alert.alert('QR code found')} // optional
showFrame={true} // (default false) optional, show frame with transparent layer (qr code or barcode will be read on this area ONLY), start animation for scanner,that stoped when find any code. Frame always at center of the screen
2021-01-11 19:16:40 +00:00
laserColor='red' // (default red) optional, color of laser in scanner frame
frameColor='white' // (default white) optional, color of border of scanner frame
2021-01-06 00:06:42 +00:00
/>
```
### Camera
Barebones camera component
2017-04-10 19:47:35 +00:00
2021-02-04 23:33:42 +00:00
```ts
import { Camera, CameraType } from 'react-native-camera-kit';
2020-08-19 17:38:52 +00:00
```
2020-10-21 23:03:18 +00:00
2021-02-04 23:33:42 +00:00
```tsx
2020-11-30 06:38:18 +00:00
< Camera
2021-01-05 23:39:04 +00:00
ref={(ref) => (this.camera = ref)}
2021-01-08 07:05:06 +00:00
cameraType={CameraType.Back} // front/back(default)
2016-08-01 13:05:55 +00:00
/>
```
2021-01-04 22:45:03 +00:00
### Camera Props (Optional)
| Props | Type | Description |
| ------------------------------ | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `flashMode` | `'on'` /`'off'`/`'auto'` | Camera flash mode. Default: `auto` |
| `focusMode` | `'on'` /`'off'` | Camera focus mode. Default: `on` |
2021-01-05 23:39:04 +00:00
| `zoomMode` | `'on'` /`'off'` | Enable pinch to zoom camera. Default: `on` |
2021-01-09 21:12:53 +00:00
| `torchMode` | `'on'` /`'off'` | Toggle flash light when camera is active. Default: `off` |
2021-01-04 22:45:03 +00:00
| `ratioOverlay` | `['int':'int', ...]` | Show a guiding overlay in the camera preview for the selected ratio. Does not crop image as of v9.0. Example: `['16:9', '1:1', '3:4']` |
| `ratioOverlayColor` | Color | Any color with alpha. Default: `'#ffffff77'` |
| `resetFocusTimeout` | Number | iOS only. Dismiss tap to focus after this many milliseconds. Default `0` (disabled). Example: `5000` is 5 seconds. |
| `resetFocusWhenMotionDetected` | Boolean | iOS only. Dismiss tap to focus when focus area content changes. Native iOS feature, see documentation: https://developer.apple.com/documentation/avfoundation/avcapturedevice/1624644-subjectareachangemonitoringenabl?language=objc). Default `true` . |
| `saveToCameraRoll` | Boolean | Using the camera roll is slower than using regular files stored in your app. On an iPhone X in debug mode, on a real phone, we measured around 100-150ms processing time to save to the camera roll. _<span style="color: red">**Note:**</span> This only work on real devices. It will hang indefinitly on simulators._ |
| `saveToCameraRollWithPhUrl` | Boolean | iOS only. If true, speeds up photo taking by about 5-50ms (measured on iPhone X) by only returning a [rn-cameraroll-compatible ](https://github.com/react-native-community/react-native-cameraroll/blob/a09af08f0a46a98b29f6ad470e59d3dc627864a2/ios/RNCAssetsLibraryRequestHandler.m#L36 ) `ph://..` URL instead of a regular `file://..` URL. | |
### Barcode Props (Optional)
| Props | Type | Description |
| -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `scanBarcode` | Boolean | Enable barcode scanner. Default: `false` |
| `showFrame` | Boolean | Show frame in barcode scanner. Default: `false` |
| `laserColor` | Color | Color of barcode scanner laser visualization. Default: `red` |
| `frameColor` | Color | Color of barcode scanner frame visualization. Default: `yellow` |
| `surfaceColor` | Color | Color of barcode scanner surface visualization. Default: `blue` |
| `onReadCode` | Function | Callback when scanner successfully reads barcode. Returned event contains `codeStringValue` . Default: `null` . Ex: `onReadCode={(event) => console.log(event.nativeEvent.codeStringValue)}` |
2016-08-01 13:05:55 +00:00
2021-01-06 00:06:42 +00:00
### Imperative API
_Note: Must be called on a valid camera ref_
2016-08-01 13:05:55 +00:00
2021-01-06 00:06:42 +00:00
#### capture({ ... })
2020-11-17 23:42:36 +00:00
Capture image (`{ saveToCameraRoll: boolean }`). Using the camera roll is slower than using regular files stored in your app. On an iPhone X in debug mode, on a real phone, we measured around 100-150ms processing time to save to the camera roll.
2021-02-04 23:33:42 +00:00
```ts
2020-11-17 23:42:36 +00:00
const image = await this.camera.capture();
```
#### checkDeviceCameraAuthorizationStatus (iOS only)
2017-04-10 19:47:35 +00:00
2021-02-04 23:33:42 +00:00
```ts
2020-11-30 06:38:18 +00:00
const isCameraAuthorized = await Camera.checkDeviceCameraAuthorizationStatus();
2016-08-01 13:05:55 +00:00
```
2017-04-10 19:47:35 +00:00
2016-08-01 13:05:55 +00:00
return values:
2016-07-14 14:18:58 +00:00
2016-08-01 13:05:55 +00:00
`AVAuthorizationStatusAuthorized` returns `true`
`AVAuthorizationStatusNotDetermined` returns `-1`
2020-10-21 23:03:18 +00:00
otherwise, returns `false`
2016-08-01 13:05:55 +00:00
2020-11-17 23:42:36 +00:00
#### requestDeviceCameraAuthorization (iOS only)
2017-04-10 19:47:35 +00:00
2021-02-04 23:33:42 +00:00
```ts
2020-11-30 06:38:18 +00:00
const isUserAuthorizedCamera = await Camera.requestDeviceCameraAuthorization();
2016-07-14 14:18:58 +00:00
```
2017-04-10 19:47:35 +00:00
2016-08-01 13:05:55 +00:00
`AVAuthorizationStatusAuthorized` returns `true`
otherwise, returns `false`
2020-10-21 23:03:18 +00:00
## Contributing
2020-10-21 23:21:49 +00:00
2020-10-21 23:03:18 +00:00
- Pull Requests are welcome, if you open a pull request we will do our best to get to it in a timely manner
- Pull Request Reviews are even more welcome! we need help testing, reviewing, and updating open PRs
- If you are interested in contributing more actively, please contact us.
2017-08-15 07:23:33 +00:00
## License
The MIT License.
2017-08-15 15:40:45 +00:00
See [LICENSE ](LICENSE )