🎈 React Native Camera Kit
A high performance, fully featured, rock solid
camera library for React Native applications
|
Cross Platform (iOS and Android)Optimized for performance and high photo capture rateQR / Barcode scanning supportCamera preview support in iOS simulator
|
Installation (RN > 0.60)
yarn add react-native-camera-kit
cd ios && pod install && cd ..
Permissions
Android
Add the following uses-permission to your AndroidManifest.xml
(usually found at: android/src/main/
)
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
iOS
Add the following usage description to your Info.plist
(usually found at: ios/PROJECT_NAME/
)
<key>NSCameraUsageDescription</key>
<string>For taking photos</string>
Running the example project
yarn bootstrap
yarn example ios
or yarn example android
Components
CameraScreen
Full screen camera component that holds camera state and provides camera controls
import { CameraScreen } from 'react-native-camera-kit';
<CameraScreen
actions={{ rightButtonText: 'Done', leftButtonText: 'Cancel' }}
onBottomButtonPressed={(event) => this.onBottomButtonPressed(event)}
flashImages={{
on: require('path/to/image'),
off: require('path/to/image'),
auto: require('path/to/image'),
}}
cameraFlipImage={require('path/to/image')}
captureButtonImage={require('path/to/image')}
torchOnImage={require('path/to/image')}
torchOffImage={require('path/to/image')}
hideControls={false}
showCapturedImageCount={false}
/>
Barcode / QR Code Scanning
Additionally, the camera screen can be used for barcode scanning
<CameraScreen
...
scanBarcode={true}
onReadCode={(event) => Alert.alert('QR code found')}
showFrame={true}
laserColor='red'
frameColor='white'
/>
Camera
Barebones camera component
import { Camera, CameraType } from 'react-native-camera-kit';
<Camera
ref={(ref) => (this.camera = ref)}
cameraType={CameraType.Back}
/>
Camera Props (Optional)
Props | Type | Description |
---|
flashMode | 'on' /'off' /'auto' | Camera flash mode. Default: auto |
focusMode | 'on' /'off' | Camera focus mode. Default: on |
zoomMode | 'on' /'off' | Enable pinch to zoom camera. Default: on |
torchMode | 'on' /'off' | Toggle flash light when camera is active. Default: off |
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. Note: 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 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)} |
Imperative API
Note: Must be called on a valid camera ref
capture({ ... })
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.
const image = await this.camera.capture();
checkDeviceCameraAuthorizationStatus (iOS only)
const isCameraAuthorized = await Camera.checkDeviceCameraAuthorizationStatus();
return values:
AVAuthorizationStatusAuthorized
returns true
AVAuthorizationStatusNotDetermined
returns -1
otherwise, returns false
requestDeviceCameraAuthorization (iOS only)
const isUserAuthorizedCamera = await Camera.requestDeviceCameraAuthorization();
AVAuthorizationStatusAuthorized
returns true
otherwise, returns false
Contributing
- 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.
License
The MIT License.
See LICENSE