DEV Community

Anas Ikhlas
Anas Ikhlas

Posted on

Simple Image Picker with React Native

In this blog, we are going to create a simple image picker with expo-image-picker.

First of all install expo-image-picker.
By running this command in your terminal:

expo install expo-image-picker
Enter fullscreen mode Exit fullscreen mode

Now import this components inside your app.

import * as ImagePicker from 'expo-image-picker';
Enter fullscreen mode Exit fullscreen mode

We will also use Image component from react-native to display selected Image:

import {  Image } from 'react-native';
Enter fullscreen mode Exit fullscreen mode

Than we will create a function inside our component:

const pickImage = async () => {
   let result = await ImagePicker.launchImageLibraryAsync({
      mediaTypes: ImagePicker.MediaTypeOptions.All,
      allowsEditing: true,
      aspect: [4, 3],
      quality: 1,
    });

// more code ...

}
Enter fullscreen mode Exit fullscreen mode

To View this image inside our component we will use react state:

const [images,setImages] = React.useState(null);
Enter fullscreen mode Exit fullscreen mode

And than we will update pickImage function:

  const pickImage = async () => {
    // No permissions request is necessary for launching the image library
    let result = await ImagePicker.launchImageLibraryAsync({
      mediaTypes: ImagePicker.MediaTypeOptions.All,
      allowsEditing: true,
      aspect: [4, 3],
      quality: 1,
    });

    // New code block
    if (!result.cancelled) { 
      setImage(result.uri);
    }
  };

Enter fullscreen mode Exit fullscreen mode

We can display image like this:

{image && <Image source={{ uri: image }} style={{ width: 200, height: 200 }} />}
Enter fullscreen mode Exit fullscreen mode

To open image picker we will call pickerImage function on Button press:

<Button title="Pick an image from camera roll" onPress={pickImage} />
Enter fullscreen mode Exit fullscreen mode

This is how our app looks like at the end:

import React, { useState, useEffect } from 'react';
import { Button, Image, View, Platform } from 'react-native';
import * as ImagePicker from 'expo-image-picker';

export default function ImagePickerExample() {
  const [image, setImage] = useState(null);

  const pickImage = async () => {
    // No permissions request is necessary for launching the image library
    let result = await ImagePicker.launchImageLibraryAsync({
      mediaTypes: ImagePicker.MediaTypeOptions.All,
      allowsEditing: true,
      aspect: [4, 3],
      quality: 1,
    });

    console.log(result);

    if (!result.cancelled) {
      setImage(result.uri);
    }
  };

  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Button title="Pick an image from camera roll" onPress={pickImage} />
      {image && <Image source={{ uri: image }} style={{ width: 200, height: 200 }} />}
    </View>
  );
}

Enter fullscreen mode Exit fullscreen mode

I Hope this article helps you.
Happy coding:)

Top comments (0)