A high performance, easy to use, rock solid camera library for React Native apps.
Go to file
aarongrider 203b10d119 Fix publish workflow 2021-02-23 11:13:41 -08:00
.github/workflows Fix publish workflow 2021-02-23 11:13:41 -08:00
android Make scaleDetector a constant to prevent threading issues 2021-01-14 12:53:22 -08:00
example minWidth and minHeight for camera component 2021-02-04 16:44:00 -08:00
images Add screenshot to readme 2020-10-23 10:56:03 -07:00
ios Removed dead code 2021-02-02 15:53:01 -08:00
src Fix style spacing 2021-02-07 20:42:07 -08:00
.eslintrc.js Refactor camera screen and fix bugs 2021-01-07 23:05:06 -08:00
.flowconfig Camera kit initial commit 2016-04-14 10:44:00 +03:00
.gitignore Refactor example code 2020-10-23 10:55:39 -07:00
.npmignore include example in .npmignore to prevent publishing of old folder 2018-08-08 21:28:26 +03:00
.prettierrc.js Prettier formatting 2020-10-23 10:56:03 -07:00
.watchmanconfig Camera kit initial commit 2016-04-14 10:44:00 +03:00
ISSUE_TEMPLATE.md Create ISSUE_TEMPLATE.md 2018-01-06 09:51:26 +02:00
LICENSE Remove wix mentions in commnets in iOS files (#309) 2020-10-23 10:51:48 -07:00
README.md Update readme for additional clarity 2021-02-23 10:07:42 -08:00
ReactNativeCameraKit.podspec fixed Xcode 12 compatibility and podspec versioning 2021-02-23 11:45:56 +01:00
babel.config.js Refactor example code 2020-10-23 10:55:39 -07:00
metro.config.js fix android 2019-04-22 16:26:46 +03:00
package.json Bump version 2021-02-23 11:04:55 -08:00
tsconfig.json Convert project to TypeScript and refactor example code 2020-11-29 22:37:49 -08:00
yarn.lock Bump node-notifier from 8.0.0 to 8.0.1 2020-12-22 20:26:00 +00:00

README.md

🎈 React Native Camera Kit

A high performance, fully featured, rock solid
camera library for React Native applications

React Native Camera Kit is released under the MIT license. Current npm package version.

  • Cross Platform (iOS and Android)

  • Optimized for performance and high photo capture rate

  • QR / Barcode scanning support

  • Camera 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 descriptions to your Info.plist (usually found at: ios/PROJECT_NAME/)

<key>NSCameraUsageDescription</key>
<string>For taking photos</string>

<key>NSPhotoLibraryUsageDescription</key>
<string>For saving 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={{
    // optional, images for flash state
    on: require('path/to/image'),
    off: require('path/to/image'),
    auto: require('path/to/image'),
  }}
  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
  hideControls={false} // (default false) optional, hides camera controls
  showCapturedImageCount={false} // (default false) optional, show count for photos taken during that capture session
/>

Barcode / QR Code Scanning

Additionally, the camera screen can be used for barcode scanning

<CameraScreen
  ...
  // Barcode props
  scanBarcode={true}
  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
  laserColor='red' // (default red) optional, color of laser in scanner frame
  frameColor='white' // (default white) optional, color of border of scanner frame
/>

Camera

Barebones camera component

import { Camera, CameraType } from 'react-native-camera-kit';
<Camera
  ref={(ref) => (this.camera = ref)}
  cameraType={CameraType.Back} // front/back(default)
/>

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