• Stars
    star
    5,916
  • Rank 6,829 (Top 0.2 %)
  • Language
    Objective-C
  • License
    MIT License
  • Created over 8 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

iOS/Android image picker with support for camera, video, configurable compression, multiple images and cropping

react-native-image-crop-picker

Backers on Open Collective Sponsors on Open Collective

iOS/Android image picker with support for camera, video, configurable compression, multiple images and cropping

Result

Important notes

  1. If you are using react-native >= 0.60 use react-native-image-crop-picker version >= 0.25.0. Otherwise use version < 0.25.0.
  2. If you want to use react-native-image-crop-picker version >= 0.39.0 you have to set your android compileSdkVersion to 33 or greater. Otherwise use react-native-image-crop-picker version < 0.39.0

Usage

Import library

import ImagePicker from 'react-native-image-crop-picker';

Select from gallery

Call single image picker with cropping

ImagePicker.openPicker({
  width: 300,
  height: 400,
  cropping: true
}).then(image => {
  console.log(image);
});

Call multiple image picker

ImagePicker.openPicker({
  multiple: true
}).then(images => {
  console.log(images);
});

Select video only from gallery

ImagePicker.openPicker({
  mediaType: "video",
}).then((video) => {
  console.log(video);
});

Android: The prop 'cropping' has been known to cause videos not to be displayed in the gallery on Android. Please do not set cropping to true when selecting videos.

Select from camera

Image

ImagePicker.openCamera({
  width: 300,
  height: 400,
  cropping: true,
}).then(image => {
  console.log(image);
});

Video

ImagePicker.openCamera({
  mediaType: 'video',
}).then(image => {
  console.log(image);
});

Crop picture

ImagePicker.openCropper({
  path: 'my-file-path.jpg',
  width: 300,
  height: 400
}).then(image => {
  console.log(image);
});

Optional cleanup

Module is creating tmp images which are going to be cleaned up automatically somewhere in the future. If you want to force cleanup, you can use clean to clean all tmp files, or cleanSingle(path) to clean single tmp file.

ImagePicker.clean().then(() => {
  console.log('removed all tmp images from tmp directory');
}).catch(e => {
  alert(e);
});

Request Object

Property Type Description
cropping bool (default false) Enable or disable cropping
width number Width of result image when used with cropping option
height number Height of result image when used with cropping option
multiple bool (default false) Enable or disable multiple image selection
writeTempFile (ios only) bool (default true) When set to false, does not write temporary files for the selected images. This is useful to improve performance when you are retrieving file contents with the includeBase64 option and don't need to read files from disk.
includeBase64 bool (default false) When set to true, the image file content will be available as a base64-encoded string in the data property. Hint: To use this string as an image source, use it like: <Image source={{uri: `data:${image.mime};base64,${image.data}`}} />
includeExif bool (default false) Include image exif data in the response
avoidEmptySpaceAroundImage (ios only) bool (default true) When set to true, the image will always fill the mask space.
cropperActiveWidgetColor (android only) string (default "#424242") When cropping image, determines ActiveWidget color.
cropperStatusBarColor (android only) string (default #424242) When cropping image, determines the color of StatusBar.
cropperToolbarColor (android only) string (default #424242) When cropping image, determines the color of Toolbar.
cropperToolbarWidgetColor (android only) string (default darker orange) When cropping image, determines the color of Toolbar text and buttons.
freeStyleCropEnabled bool (default false) Enables user to apply custom rectangle area for cropping
cropperToolbarTitle string (default Edit Photo) When cropping image, determines the title of Toolbar.
cropperCircleOverlay bool (default false) Enable or disable circular cropping mask.
disableCropperColorSetters (android only) bool (default false) When cropping image, disables the color setters for cropping library.
minFiles (ios only) number (default 1) Min number of files to select when using multiple option
maxFiles (ios only) number (default 5) Max number of files to select when using multiple option
waitAnimationEnd (ios only) bool (default true) Promise will resolve/reject once ViewController completion block is called
smartAlbums (ios only) array (supported values) (default ['UserLibrary', 'PhotoStream', 'Panoramas', 'Videos', 'Bursts']) List of smart albums to choose from
useFrontCamera bool (default false) Whether to default to the front/'selfie' camera when opened. Please note that not all Android devices handle this parameter, see issue #1058
compressVideoPreset (ios only) string (default MediumQuality) Choose which preset will be used for video compression
compressImageMaxWidth number (default none) Compress image with maximum width
compressImageMaxHeight number (default none) Compress image with maximum height
compressImageQuality number (default 1 (Android)/0.8 (iOS)) Compress image with quality (from 0 to 1, where 1 is best quality). On iOS, values larger than 0.8 don't produce a noticeable quality increase in most images, while a value of 0.8 will reduce the file size by about half or less compared to a value of 1.
loadingLabelText (ios only) string (default "Processing assets...") Text displayed while photo is loading in picker
mediaType string (default any) Accepted mediaType for image selection, can be one of: 'photo', 'video', or 'any'
showsSelectedCount (ios only) bool (default true) Whether to show the number of selected assets
sortOrder (ios only) string (default 'none', supported values: 'asc', 'desc', 'none') Applies a sort order on the creation date on how media is displayed within the albums/detail photo views when opening the image picker
forceJpg (ios only) bool (default false) Whether to convert photos to JPG. This will also convert any Live Photo into its JPG representation
showCropGuidelines (android only) bool (default true) Whether to show the 3x3 grid on top of the image during cropping
showCropFrame (android only) bool (default true) Whether to show crop frame during cropping
hideBottomControls (android only) bool (default false) Whether to display bottom controls
enableRotationGesture (android only) bool (default false) Whether to enable rotating the image by hand gesture
cropperChooseText (ios only)            string (default choose)         Choose button text
cropperChooseColor (ios only) string (default #FFCC00) HEX format color for the Choose button. Default color is controlled by TOCropViewController.
cropperCancelText (ios only) string (default Cancel) Cancel button text
cropperCancelColor (ios only) string (default tint iOS color ) HEX format color for the Cancel button. Default value is the default tint iOS color controlled by TOCropViewController
cropperRotateButtonsHidden (ios only)            bool (default false)         Enable or disable cropper rotate buttons

Smart Album Types (ios)

NOTE: Some of these types may not be available on all iOS versions. Be sure to check this to avoid issues.

['PhotoStream', 'Generic', 'Panoramas', 'Videos', 'Favorites', 'Timelapses', 'AllHidden', 'RecentlyAdded', 'Bursts', 'SlomoVideos', 'UserLibrary', 'SelfPortraits', 'Screenshots', 'DepthEffect', 'LivePhotos', 'Animated', 'LongExposure']

Response Object

Property Type Description
path string Selected image location. This is null when the writeTempFile option is set to false.
localIdentifier(ios only) string Selected images' localidentifier, used for PHAsset searching
sourceURL(ios only) string Selected images' source path, do not have write access
filename(ios only) string Selected images' filename
width number Selected image width
height number Selected image height
mime string Selected image MIME type (image/jpeg, image/png)
size number Selected image size in bytes
duration number Video duration time in milliseconds
data base64 Optional base64 selected file representation
exif object Extracted exif data from image. Response format is platform specific
cropRect object Cropped image rectangle (width, height, x, y)
creationDate (ios only) string UNIX timestamp when image was created
modificationDate string UNIX timestamp when image was last modified

Install

Step 1

npm i react-native-image-crop-picker --save

Step 2

iOS

cd ios
pod install

Step 3

iOS

Step 1

In Xcode open Info.plist and add string key NSPhotoLibraryUsageDescription with value that describes why you need access to user photos. More info here https://forums.developer.apple.com/thread/62229. Depending on what features you use, you also may need NSCameraUsageDescription and NSMicrophoneUsageDescription keys.

(Optional) Step 2 - To localizate the camera / gallery / cropper text buttons

  • Open your Xcode project
  • Go to your project settings by opening the project name on the Navigation (left side)
  • Select your project in the project list
  • Should be into the Info tab and add in Localizations the language your app was missing throughout the +
  • Rebuild and you should now have your app camera and gallery with the classic ios text in the language you added.

Android

  • VERY IMPORTANT Add the following to your build.gradle's repositories section. (android/build.gradle)
allprojects {
    repositories {
      mavenLocal()
      jcenter()
      maven { url "$rootDir/../node_modules/react-native/android" }

      // ADD THIS
      maven { url 'https://maven.google.com' }

      // ADD THIS
      maven { url "https://www.jitpack.io" }
    }
}
  • Add useSupportLibrary (android/app/build.gradle)
android {
    ...

    defaultConfig {
        ...
        vectorDrawables.useSupportLibrary = true
        ...
    }
    ...
}
  • Use Android SDK >= 26 (android/app/build.gradle)
android {
    compileSdkVersion 27
    buildToolsVersion "27.0.3"
    ...
    
    defaultConfig {
      ...
      targetSdkVersion 27
      ...
    }
    ...
}
  • Minimum Gradle version if you are using react-native-image-crop-picker >= 0.35.0
3.3.3
3.4.3
3.5.4
3.6.4
4.0.1

Reference for more details #1406

  • [Optional] If you want to use camera picker in your project, add following to app/src/main/AndroidManifest.xml

    • <uses-permission android:name="android.permission.CAMERA"/>
  • [Optional] If you want to use front camera, also add following to app/src/main/ AndroidManifest.xml

    • <uses-feature android:name="android.hardware.camera" android:required="false" />
    • <uses-feature android:name="android.hardware.camera.front" android:required="false" />

TO DO

  • [Android] Standardize multiple select
  • [Android] Video compression

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

License

MIT

More Repositories

1

grpool

Lightweight Goroutine pool
Go
734
star
2

neo

Go Web Framework
Go
419
star
3

angular-cookie

Lightweight Angular module for access to cookies
JavaScript
266
star
4

rerun

Configurable recompiling and rerunning go apps when source changes
Go
167
star
5

httpcheck

supertest inspired library for testing HTTP servers
Go
151
star
6

golog

Simple but powerful go logging library
Go
92
star
7

migrate

Tool for managing and executing your database migrations
Ruby
60
star
8

react-native-image-preview

Display zoomed image in transparent modal window
JavaScript
33
star
9

koa-bunyan

Using node-bunyan as koa logging middleware
JavaScript
22
star
10

react-native-autogrow-input

Missing auto grow multiline input component
JavaScript
20
star
11

arch-orchestrator

Orchestrator architectural pattern for large node.js applications
JavaScript
18
star
12

co-foreach

Run generator function as forEach loop callback
JavaScript
17
star
13

koa-routing

Manage koa routes on right way
JavaScript
15
star
14

tic-tac-toe

Tic-tac-toe game with AI in Prolog and GUI in Python (kivy framework + pyswip)
Python
11
star
15

urlregex

express-like named url parameters extracting from url
Go
8
star
16

go-clicolor

Package provides ability to print colored text to stdout.
Go
6
star
17

rust-elo

Rust crate for calculating player rating based on elo ranking system
Rust
5
star
18

react-ts-boilerplate

Minimal boilerplate for React typescript projects
JavaScript
5
star
19

i18n-xlsx

Typesafe i18n
TypeScript
5
star
20

sequelize-import

Lib for importing sequelize models with ease
JavaScript
5
star
21

ts-boilerplate

Minimal boilerplate for typescript projects
TypeScript
4
star
22

socket.io-cookie

Cookie parser middleware for socket.io
JavaScript
4
star
23

BreakableSprite-Cocos2D

Make breakable sprite with texture and physics (Box2D), and cut sprite at two specified points
Objective-C
4
star
24

genify

Bringing power of javascript generators into normal javascript environment
JavaScript
4
star
25

jFS

File system simulator with basic UNIX commands. Built using composite + abstract factory + singleton
Java
3
star
26

jDrawing

Library for drawing 2D/3D bodies and scenes in java
Java
3
star
27

b2GLDraw

OpenGL debug draw for Box2D
C++
3
star
28

monkey

Programming language implemented for fun and educational purposes
Go
3
star
29

glLamp

Mini OpenGL lib in C++ with 3D lamp example
C++
3
star
30

BounceCat

iOS game
Objective-C
3
star
31

koa-ember-seed

Starter kit for new Koa projects with Ember on client
JavaScript
3
star
32

easy-postgresql-fixture

postgreSQL middleware for easy-fixture
JavaScript
3
star
33

mongo-spade-replicate

Multi-agent system for distributed mongodb replication
Python
3
star
34

neo-cors

Enable CORS in your Neo application
Go
3
star
35

koa-r

Requesting node modules from one central place
JavaScript
2
star
36

easy-fixture

Converting live data from multiple data sources into fixture, and importing into corresponding data destinations
JavaScript
2
star
37

grunt-easy-postgresql-fixture

Grunt task for easy-postgresql-fixture
JavaScript
2
star
38

vim-javascript-adapted

Vim adapted for javascript development
Vim Script
2
star
39

spade-samples

Smart Python multi-Agent Development Environment samples
Python
2
star
40

cmap

Map with convenient methods for getting and setting values
Go
2
star
41

easy-mongo-fixture

Mongo middleware for easy-fixture
JavaScript
2
star
42

observable_pattern

Simple implementation of observable patten in C
C
2
star
43

abplot

Concurrent execution of ab tests and visualizing results using gnuplot
Rust
2
star
44

ChatApplication

Server and client side (c# wpf app)
C#
2
star
45

emacs-config

My emacs config
2
star
46

latte

Django site for management of restaurants and their menus
Python
2
star
47

node-authorizator

Node module for user authorization
JavaScript
2
star
48

pyobjus-ball

Example of using accelerometer to move ball on screen, with pyobjus and kivy-ios on iOS
Python
2
star
49

risk_doctor

Django site for management of an emergency situations
Python
2
star
50

grunt-easy-mongo-fixture

Grunt task for easy-mongo-fixture plugin. It helps to your load and save your fixtures using mongo database
JavaScript
2
star
51

authorizator-example

Example of using node-authorizator
JavaScript
1
star
52

b2GL

Box2D integration with OpenGL
C++
1
star
53

node-ts-boilerplate

Minimal boilerplate for Node.js typescript projects
TypeScript
1
star
54

ExamsWS

SOAP web service for overview of student exams
Java
1
star
55

node-module-seed

Seed repo for new node modules
JavaScript
1
star
56

salt-java8-formula

SaltStack
1
star
57

bunyan-cassandra

Cassandra bunyan stream
JavaScript
1
star
58

ProFlightXNA

Example of game written with help of XNA Framework
C#
1
star
59

Threading-and-semaphores

Examples of Threading and semaphores in c
C
1
star
60

List-ADT-implementation

Implementation of list using pointers and array in c
C
1
star
61

server_configs

SIS konfiguracijski file-ovi
Shell
1
star
62

salt-nats-formula

SaltStack
1
star
63

click-and-screenshot

Python script for performing mouse click (from Python) followed by screenshot (from Python)
Python
1
star
64

Zend_sample

Example of application in zend framework
PHP
1
star
65

salt-redis-formula

SaltStack
1
star
66

njuskalo-crawler

TypeScript
1
star
67

redis-terraform-salt

Terraform configuration to create infrastructure for Redis 4 cluster which is going to be provisioned by salt
HCL
1
star
68

salt-elasticsearch-formula

Salt formula for running Elasticsearch cluster using zen of aws discovery
SaltStack
1
star
69

salt-golang-formula

SaltStack
1
star
70

Edward-company-cSharp-app

Application for Edward d.o.o. company. Application use ORM to acces data (LINQ)
C#
1
star
71

koa-err

Global error handling middleware for koa
JavaScript
1
star
72

PandPProject

Web application, with WCF web service, and Windows phone 7 client app
C#
1
star
73

xmpp_client

Django XMPP (chat client) app. It uses strophe.js library for accessing ejabberd server
JavaScript
1
star
74

examples-of-algorithms-

Different types of algorithms
C++
1
star
75

akka-merge-sort

Merge sort using akka
Shell
1
star