Как стать автором
Обновить

Как использовать React-Native-Image-Picker?

Уровень сложностиПростой

Как выбрать медиа из галереи или камеры?

Выбор изображений из галереи или камеры — одна из самых популярных и основных задач при разработке приложения с помощью React Native. Как мы можем это сделать?

Сегодня я вернулся, чтобы поговорить о том, как мы можем легко выбирать изображения из библиотеки вашего устройства или использовать камеру для съемки фотографий. Позвольте мне познакомить вас с React Native Image Picker.

В этой статье я покажу React Native Image Picker, разработав приложение с загрузкой изображений. Приложение позволит нам выбирать и отображать фотографии.

Настройка проекта

Прежде чем мы начнем, мне нужно создать новый проект React Native со следующими строками кода:

npx react-native init react_native_image_avatar_pickercd react_native_image_avatar_pickernpm run ios

Отлично, мы успешно создали наше приложение React Native.

Теперь я собираюсь использовать React Native Image Pickerбиблиотеку для реализации компонента выбора изображений. Это модуль React Native, который позволяет выбирать фото/видео из библиотеки устройства или камеры. Давайте установим его с помощью следующих команд:

yarn add react-native-image-pickercd ios && pod install && cd ..

Далее нам нужно добавить разрешения iOS для нашего приложения Info.plist:

<key>NSPhotoLibraryUsageDescription</key><string>Your message to user when the photo library is accessed for the first time</string><key>NSCameraUsageDescription</key><string>The camera is accessed for the first time</string><key>NSMicrophoneUsageDescription</key><string>The microphone is accessed for the first time</string>

Нам не требуются разрешения для Android ( saveToPhotosтребуется проверка разрешений ).

После этого, если мы запустим приложение и все будет в порядке, мы готовы к написанию кода!


Создайте базовый экран приложения

Основная идея состоит в том, чтобы создать компонент выбора изображений, который позволит пользователю загрузить новую фотографию из библиотеки устройства или сделать снимок с помощью камеры.

Прежде всего, мы обновим экран базового приложения новым зеленым заголовком и фоном. Создадим ImagePickerHeaderкомпонент:

import { SafeAreaView, StyleSheet, Text, View } from "react-native";export function ImagePickerHeader() {    return (      <SafeAreaView style={styles.safeArea}>        <View style={styles.topBar}>          <Text style={styles.topBarTitleText}>Avatar Picker</Text>        </View>      </SafeAreaView>    );  }  const styles = StyleSheet.create({    safeArea: {        backgroundColor: '#62d1bc',      },      topBar: {        height: 50,        backgroundColor: '#62d1bc',        alignItems: 'center',        justifyContent: 'center',      },      topBarTitleText: {        color: '#ffffff',        fontSize: 20,      },  })

Далее я собираюсь создать основной ImagePickerAvatarкомпонент, который позволит вам загружать изображения.

import { Image, ImageBackground, StyleSheet, Text, TouchableOpacity, View } from 'react-native'import React from 'react'const background=require('../assets/images/whatsapp-background.jpg')const avatar=require('../assets/images/avatar.jpg')const addButton=require('../assets/images/add-button.png')interface ImagePickerAvatarInterface{    uri:any,    onPress:() => void}const ImagePickerAvatar = ({uri, onPress}:ImagePickerAvatarInterface) => {  return (    <ImageBackground    style={styles.imageBackground}    source={background}>    <View style={styles.avatar}>      <ImageBackground        style={styles.avatarImage}        source={uri ? { uri } : avatar}      />      <TouchableOpacity style={styles.addButton} onPress={onPress}>        <Image style={styles.addButtonIcon} source={addButton} />      </TouchableOpacity>      <Text style={styles.usernameText}>Omurbek Mamytbekov</Text>    </View>  </ImageBackground>  )}export default ImagePickerAvatarconst styles = StyleSheet.create({    imageBackground: {      flex: 1,    },    avatar: {      alignItems: 'center',      marginTop: '40%',    },    avatarImage: {      height: 260,      width: 260,      overflow: 'hidden',      borderColor: '#ffffff',      borderWidth: 4,      borderRadius: 260 / 2,    },    addButton: {      height: 54,      width: 54,      backgroundColor: '#f2f2fC',      borderRadius: 50,      position: 'absolute',      right: 104,      bottom: 40,    },    addButtonIcon: {      height: 54,      width: 54,    },    usernameText: {      fontSize: 24,      fontWeight: '700',      color: '#ffffff',      marginTop: 12,    },  });

Вот результат:

Экран выбора главного изображения аватара
Экран выбора главного изображения аватара

Выберите фотографию с устройства

В этом уроке мы собираемся реализовать две возможности выбора или захвата фотографии с помощью камеры. Я буду использовать настраиваемое анимированное модальное окно, используя React Native Modalпакет, чтобы показать пользователю два варианта. Для этого нам необходимо установить его:

yarn add react-native-modal

Далее я создам ImagePickerModalкомпонент:

import React from 'react';import { SafeAreaView, Text, Image, Pressable, StyleSheet } from 'react-native';import Modal from 'react-native-modal';interface  ImagePickerModalProps{    isVisible: boolean;    onClose:(() => void);    onImageLibraryPress:(() => void);    onCameraPress:(() => void);}export function ImagePickerModal({  isVisible,  onClose,  onImageLibraryPress,  onCameraPress,}: ImagePickerModalProps) {  return (    <Modal      isVisible={isVisible}      onBackButtonPress={onClose}      onBackdropPress={onClose}      style={styles.modal}>      <SafeAreaView style={styles.buttons}>        <Pressable style={styles.button} onPress={onImageLibraryPress}>          <Image style={styles.buttonIcon} source={require('../assets/images/image.jpg')} />          <Text style={styles.buttonText}>Library</Text>        </Pressable>        <Pressable style={styles.button} onPress={onCameraPress}>          <Image style={styles.buttonIcon} source={require('../assets/images/camera.png')} />          <Text style={styles.buttonText}>Camera</Text>        </Pressable>      </SafeAreaView>    </Modal>  );}const styles = StyleSheet.create({  modal: {    justifyContent: 'flex-end',    margin: 0,  },  buttonIcon: {    width: 30,    height: 30,    margin: 10,  },  buttons: {    backgroundColor: 'white',    flexDirection: 'row',    borderTopRightRadius: 30,    borderTopLeftRadius: 30,  },  button: {    flex: 1,    justifyContent: 'center',    alignItems: 'center',  },  buttonText: {    fontSize: 14,    fontWeight: '600',  },});

И последнее, но не менее важное: нам нужно реализовать две функции:

  • onImageLibraryPress— выбрать изображение из библиотеки

  • onCameraPress— сфотографироваться с помощью камеры

Теперь давайте обновим наш UserScreen.jsфайл:

import { StyleSheet, Text, View } from 'react-native'import React, { useCallback, useState } from 'react'import { ImagePickerHeader } from '../components/ImagePickerHeader'import ImagePickerAvatar from '../components/ImagePickerAvatar'import { ImagePickerModal } from '../components/ImagePickerModal'import * as ImagePicker from 'react-native-image-picker'const UserScreen = () => {    const [pickerResponse, setPickerResponse] = useState<any>(null);    const [visible, setVisible] = useState(false);    const onImageLibraryPress = useCallback(() => {        const options:any = {          selectionLimit: 1,          mediaType: 'photo',          includeBase64: false,        };        ImagePicker.launchImageLibrary(options, setPickerResponse);      }, []);      const onCameraPress = useCallback(() => {        const options = {          saveToPhotos: true,          mediaType: 'photo',          includeBase64: false,        };        ImagePicker.launchCamera(options, setPickerResponse);      }, []);      const uri = pickerResponse?.assets && pickerResponse.assets[0].uri;  return (    <>        <ImagePickerHeader/>        <ImagePickerAvatar uri={uri} onPress={() => setVisible(true)}/>        <ImagePickerModal    isVisible={visible}        onCameraPress={onCameraPress}         onClose={() => setVisible(false)}         onImageLibraryPress={onImageLibraryPress}/>         </>  )}export default UserScreen

Давайте продемонстрируем наше приложение для выбора изображений

Если вы хотите проверить весь код, вот ссылка на Github .

Спасибо за прочтение, надеюсь, эта статья была вам полезна. Приятного кодирования!

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.