

npm install --save react-native-image-picker
android/app/src/main/AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
ios/project-name/Info.plist
<key>NSCameraUsageDescription</key>
<string>카메라 사용 권한은 이미지 촬영 및 첨부를 위해 필요합니다.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>카메라 사용 권한은 이미지 촬영 및 첨부를 위해 필요합니다.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>카메라 사용 권한은 이미지 촬영 및 첨부를 위해 필요합니다.</string>
launchImageLibrary(options, callback);
: 갤러리에서 이미지를 선택할 때 사용한다.
import ImagePicker from 'react-native-image-picker';
launchImageLibrary(
{
mediaType: 'photo',
maxWidth: 512,
maxHeight: 512,
includeBase64: false,
quality: 1,
selectionLimit: 0, // 0으로 설정하면 여러 개의 이미지 선택 가능
},
async res => {
if (res.didCancel) {
console.log('User cancelled image picker');
} else if (res.errorCode) {
console.log('ImagePicker Error: ', res.errorMessage);
} else {
const assets = res.assets; // 선택한 모든 이미지들
console.log('Selected assets:', assets);
},
);
전체 코드로 보면 다음과 같다.
import {launchImageLibrary} from 'react-native-image-picker';
...
const Filter = () => {
const navigation = useNavigation();
// 업로드 상태를 나타내기 위한 변수
const [isUploading, setIsUploading] = useState(false);
// 이미지를 선택하는 함수
const onSelectImage = () => {
// 업로드 상태를 true로 설정
setIsUploading(true);
launchImageLibrary(
{
mediaType: 'photo',
maxWidth: 512,
maxHeight: 512,
includeBase64: false,
quality: 1,
selectionLimit: 0, // 0으로 설정하면 여러 개의 이미지 선택 가능
},
async res => {
if (res.didCancel) {
console.log('User cancelled image picker');
} else if (res.errorCode) {
console.log('ImagePicker Error: ', res.errorMessage);
} else {
const assets = res.assets; // 선택한 모든 이미지들
console.log('Selected assets:', assets);
// 필요한 Presigned URL 개수만큼 요청
const presignedUrls = await getPresignedUrls(assets.length);
// 각 이미지에 대해 Presigned URL을 사용하여 업로드
const imageUrls = await Promise.all(
assets.map((asset, index) =>
uploadImageToS3(asset, presignedUrls[index]),
),
);
console.log('Uploaded image URLs:', imageUrls);
navigation.navigate('Filter1', {imageUrls});
setIsUploading(false);
}
},
);
};
...
참고
https://adjh54.tistory.com/206#google_vignette
study: 리네다기 | 8장 - react-native-image-picker
react-native 갤러리 사진 불러오기 (react-native-community/cameraroll 사용)
RN) ImagePicker