2017-04-10 19:47:35 +00:00
2016-04-13 11:56:29 +00:00
# react-native-camera-kit
2016-04-17 12:46:49 +00:00
2016-07-14 14:18:58 +00:00
Native camera control.
2016-04-17 12:46:20 +00:00
2016-08-01 13:05:55 +00:00
![](img/crazyUnicorn.png) ![](img/zoom.png)
2017-03-28 12:42:33 +00:00
## Installation
2016-04-18 09:40:16 +00:00
2017-04-10 19:47:35 +00:00
#### Install using npm or yarn:
```bash
npm install react-native-camera-kit --save
```
Or if you're using yarn:
```bash
yarn add react-native-camera-kit
```
#### iOS
2016-04-18 09:40:16 +00:00
2017-06-20 12:24:45 +00:00
- Locate the module lib folder in your node modules: `PROJECT_DIR/node_modules/react-native-camera-kit/ios/lib`
2016-07-14 14:18:58 +00:00
- Drag the `ReactNativeCameraKit.xcodeproj` project file into your project
2017-04-10 19:47:35 +00:00
- Add `libReactNativeCameraKit.a` to all your target **Linked Frameworks and Libraries** (prone to be forgotten)
#### Android
2016-04-18 09:40:16 +00:00
2017-04-10 19:47:35 +00:00
Add the following to your project's `settings.gradle` file:
2016-04-18 09:40:16 +00:00
2016-07-26 14:21:51 +00:00
2017-04-10 19:47:35 +00:00
```diff
+ include ':rncamerakit'
+ project(':rncamerakit').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera-kit/android/')
```
2016-07-26 14:21:51 +00:00
2017-04-10 19:47:35 +00:00
Then add to your app `app/build.gradle` in the `dependencies` section:
2016-07-26 14:21:51 +00:00
2017-04-10 19:47:35 +00:00
```diff
+ compile project(":rncamerakit")
2017-04-10 19:47:57 +00:00
```
2016-07-26 14:21:51 +00:00
2017-06-20 14:10:39 +00:00
Then in `MainApplication.java` add:
2016-07-26 14:21:51 +00:00
2017-04-10 19:47:35 +00:00
```diff
+ import com.wix.RNCameraKit.RNCameraKitPackage;
```
2016-07-26 14:21:51 +00:00
2017-04-10 19:47:35 +00:00
And in the package list in the same file (e.g. `getPackages` ) add:
2016-07-26 14:21:51 +00:00
2017-04-10 19:47:35 +00:00
```diff
+ new RNCameraKitPackage()
```
2016-07-26 14:21:51 +00:00
2017-08-16 07:46:18 +00:00
## APIs
2016-04-18 09:40:16 +00:00
2017-08-16 07:46:18 +00:00
### CameraKitCamera - Camera component
2017-04-10 19:47:35 +00:00
```js
2016-07-14 14:18:58 +00:00
< CameraKitCamera
2017-04-10 19:47:35 +00:00
ref={cam => this.camera = cam}
style={{
flex: 1,
backgroundColor: 'white'
2017-03-28 12:42:33 +00:00
}}
cameraOptions={{
flashMode: 'auto', // on/off/auto(default)
focusMode: 'on', // off/on(default)
zoomMode: 'on', // off/on(default)
2017-04-10 19:47:35 +00:00
ratioOverlay:'1:1', // optional, ratio overlay on the camera and crop the image seamlessly
2017-03-28 12:42:33 +00:00
ratioOverlayColor: '#00000077' // optional
}}
2016-08-01 13:05:55 +00:00
/>
```
2017-03-28 12:42:33 +00:00
### CameraKitCamera cameraOptions
2016-08-01 13:05:55 +00:00
2017-04-10 19:47:35 +00:00
Attribute | Values | Description
----------------- | ---------------------- | -----------
2017-08-05 06:25:59 +00:00
`flashMode` |`'on'`/`'off'`/`'auto'` | camera flash mode (default is `auto` )
`focusMode` | `'on'` /`'off'` | camera focus mode (default is `on` )
`zoomMode` | `'on'` /`'off'` | camera zoom mode
`ratioOverlay` | `['int':'int', ...]` | overlay on top of the camera view (crop the image to the selected size) Example: `['16:9', '1:1', '3:4']`
`ratioOverlayColor` | Color | any color with alpha (default is ```'#ffffff77'```)
2016-08-01 13:05:55 +00:00
2017-03-28 12:42:33 +00:00
### CameraKitCamera API
2016-08-01 13:05:55 +00:00
2017-03-28 12:42:33 +00:00
#### checkDeviceCameraAuthorizationStatus
2017-04-10 19:47:35 +00:00
```js
2016-08-01 13:05:55 +00:00
const isCameraAuthorized = await CameraKitCamera.checkDeviceCameraAuthorizationStatus();
```
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`
otherwise, returns ```false```
2017-03-28 12:42:33 +00:00
#### requestDeviceCameraAuthorization
2017-04-10 19:47:35 +00:00
```js
2016-08-01 13:05:55 +00:00
const isUserAuthorizedCamera = await CameraKitCamera.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`
2017-08-16 07:46:18 +00:00
#### capture - must have the wanted camera capture reference
2016-08-01 13:05:55 +00:00
2017-08-10 19:41:39 +00:00
Capture image (`shouldSaveToCameraRoll: boolean`)
2016-07-14 14:18:58 +00:00
2017-04-10 19:47:35 +00:00
```js
2016-07-14 14:18:58 +00:00
const image = await this.camera.capture(true);
```
2017-08-16 07:46:18 +00:00
#### setFlashMode - must have the wanted camera capture reference
2016-07-14 14:18:58 +00:00
2016-09-19 08:40:44 +00:00
Set flash mode (`auto`/`on`/`off`)
2016-07-14 14:18:58 +00:00
2017-04-10 19:47:35 +00:00
```js
2016-07-14 14:18:58 +00:00
const success = await this.camera.setFlashMode(newFlashData.mode);
```
2017-08-16 07:46:18 +00:00
#### changeCamera - must have the wanted camera capture reference
2016-07-14 14:18:58 +00:00
Change to fornt/rear camera
2017-04-10 19:47:35 +00:00
```js
2016-07-14 14:18:58 +00:00
const success = await this.camera.changeCamera();
```
2017-08-16 07:46:18 +00:00
### CameraKitGalleryView - Gallery grid component
2016-04-18 09:40:16 +00:00
2017-08-15 07:26:25 +00:00
Native Gallery View (based on `UICollectionView` (iOS) and ` RecyclerView` (Android))
2016-08-08 08:22:22 +00:00
2017-03-01 16:45:50 +00:00
![](img/camerakitgalleryview.png)
2017-04-10 19:47:35 +00:00
```js
2016-07-14 14:18:58 +00:00
< CameraKitGalleryView
2017-04-10 19:47:35 +00:00
ref={gallery => this.gallery = gallery}
2017-03-28 12:42:33 +00:00
style={{flex: 1, marginTop: 20}}
minimumInteritemSpacing={10}
minimumLineSpacing={10}
albumName={< ALBUM_NAME > }
columnCount={3}
2017-04-10 19:47:35 +00:00
onTapImage={event => {
2017-08-15 07:26:25 +00:00
// event.nativeEvent.selected - ALL selected images ids
2017-03-28 12:42:33 +00:00
}}
selectedImages={< MAINTAIN_SELECETED_IMAGES > }
selectedImageIcon={require('< IMAGE_FILE_PATH > '))}
unSelectedImageIcon={require('< IMAGE_FILE_PATH > ')}
2016-08-01 13:05:55 +00:00
/>
2016-04-18 09:40:16 +00:00
```
2017-03-01 16:41:32 +00:00
2017-03-01 16:52:30 +00:00
Attribute | Values | Description
2017-03-01 16:41:32 +00:00
-------- | ----- | ------------
2017-08-15 13:23:18 +00:00
`minimumInteritemSpacing` | Float | Minimum inner Item spacing
`minimumLineSpacing` | Float | Minimum line spacing
`imageStrokeColor` | Color | Image stroke color
`albumName` | String | Album name to show
`columnCount` | Integer | How many clumns in one row
`onTapImage` | Function | Callback when image tapped
`selectedImages` | Array | Selected images (will show the selected badge)
`selectedImageIcon` | `require(_PATH_)` | - _DEPRECATED_ use Selection - Selected image badge image
`unSelectedImageIcon` | `require(_PATH_)` | - _DEPRECATED_ use Selection - Unselected image badge image
2017-08-16 07:46:18 +00:00
`selection` | Object | See [Selection section ](#selection )
2017-08-15 13:23:18 +00:00
`getUrlOnTapImage` | Boolean | iOS only - On image tap return the image internal (tmp folder) uri (intead of `Photos.framework` asset id)
2017-08-16 07:46:18 +00:00
`customButtonStyle` | Object | See [Custom Button ](#custom-button ) section
2017-08-15 13:23:18 +00:00
`onCustomButtonPress` | Function | Callback when custom button tapped
`contentInset` (iOS) | Object | The amount by which the gellery view content is inset from its edges (similar to `ScrollView` contentInset)
2017-08-17 07:23:59 +00:00
`remoteDownloadIndicatorType` | String (`'spinner'` / `'progress-bar'` / `'progress-pie'` ) | iOS only - If remote download (iCloud) is needed, which type of indicator to show
2017-08-15 15:40:45 +00:00
`remoteDownloadIndicatorColor` | Color | iOS only - Color of the remote download indicator to show
`onRemoteDownloadChanged` | Function | iOS only - Callback when the device curentlly download remote image stored in the iCloud.
2017-03-01 16:41:32 +00:00
#### Custom Button
2017-04-10 19:47:35 +00:00
2017-03-01 16:52:30 +00:00
Attribute | Values | Description
2017-03-01 16:41:32 +00:00
-------- | ----- | ------------
2017-08-05 06:25:59 +00:00
`image` | `require(_PATH_)` | Custom button image
`backgroundColor` | Color | Custom button background color
2017-03-01 16:41:32 +00:00
#### Selection
2017-03-01 16:52:30 +00:00
Attribute | Values | Description
2017-03-01 16:41:32 +00:00
-------- | ----- | ------------
2017-08-05 06:25:59 +00:00
`selectedImage` |`require(_PATH_)`|Selected image badge image
`unselectedImage` |`require(_PATH_)`|Unselected image badge image
`imagePosition` |`bottom/top-right/left` / `center` | Selected/Unselected badge image position (Default:`top-right`)
`overlayColor` |Color| Image selected overlay color
`imageSizeAndroid` |`large`/`medium`| Android Only - Selected badge image size
2017-08-05 06:23:29 +00:00
2017-08-15 07:23:33 +00:00
## QR Code
2017-08-05 06:23:29 +00:00
2017-08-10 19:41:39 +00:00
Want/Need QR Code support embed in this package, please vote [HERE ](https://github.com/wix/react-native-camera-kit/issues/60 )
2017-08-15 07:23:33 +00:00
2017-08-17 11:58:40 +00:00
## Credits
* [M13ProgressSuite ](https://github.com/Marxon13/M13ProgressSuite ) component by Marxon13 - A suite containing many tools to display progress information on iOS.
2017-08-15 07:23:33 +00:00
## License
The MIT License.
2017-08-15 15:40:45 +00:00
See [LICENSE ](LICENSE )