0
카메라로 촬영 한 이미지를 손쉽게 저장할 수 있습니다. 그러나 카메라 롤에서 이미지를 선택하면 이미지를 저장하고 싶지 않습니다. 복제본이 만들어지기 때문입니다.카메라 롤에서 가져온 이미지를 카메라 롤에 저장하지 않으려면 어떻게해야합니까? [iOS]
다음을 수행하고 카메라 롤에 선택적으로 저장하려면 어떻게해야합니까?
EDIT 1 : rmaddy가 말한 것처럼 : picker.sourceType이 UIImagePickerControllerSourceTypeCamera과 동일한 경우에만 카메라 롤에 저장합니다.
하지만 그렇게하면 선택한 이미지의 정보 (주로 파일 이름)를 가져올 수 없습니다.
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
[self.myImageView setImage: image];
[self.myImageView setContentMode:UIViewContentModeScaleAspectFit];
ALAssetsLibrary *al=[[ALAssetsLibrary alloc] init];
// ------> Saving to Camera Roll <------------
[al writeImageToSavedPhotosAlbum:[image CGImage] metadata:nil completionBlock:^(NSURL *assetURL,NSError *error) {
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myAsset) {
ALAssetRepresentation *rep = [myAsset defaultRepresentation];
NSString *fileName = [rep filename];
ImageInfo *imgInfo = [[ImageInfo alloc] initWithEventId:0 name:fileName image:UIImageJPEGRepresentation(image, 1.0)];
imgInfo.isDirty = YES;
[self.imagesArray addObject:imgInfo];
[self dismissViewControllerAnimated:YES completion:nil];
NSLog(@"Image from Camera %@ added to imageArray",fileName);
};
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];
[assetsLibrary assetForURL:assetURL
resultBlock:resultblock
failureBlock:nil];
}];
}
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
{
// Code here to support video if enabled
}
편집 2 :
는이 MOD 해결할: (내가 코드 중복의 약간이 있다는 것을 알고, 나중에 그것을 개선하려고합니다)
if (newMedia){
ALAssetsLibrary *al=[[ALAssetsLibrary alloc] init];
[al writeImageToSavedPhotosAlbum:[image CGImage] metadata:nil completionBlock:^(NSURL *assetURL,NSError *error)
{
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myAsset)
{
ALAssetRepresentation *rep = [myAsset defaultRepresentation];
//NSString *fileName = [rep filename];
NSString *imgUrl = [[rep url] absoluteString];
ImageInfo *imgInfo = [[ImageInfo alloc] initWithEventId:0 imgUrl:imgUrl image:UIImageJPEGRepresentation(image, 1.0)];
imgInfo.isDirty = YES;
[self.imagesArray addObject:imgInfo];
[self dismissViewControllerAnimated:YES completion:nil];
NSLog(@"Image from Camera %@ added to imageArray",imgUrl);
};
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];
[assetsLibrary assetForURL:assetURL
resultBlock:resultblock
failureBlock:nil];
}];
} else {
NSString* imgUrl = UIImagePickerControllerReferenceURL;
ImageInfo *imgInfo = [[ImageInfo alloc] initWithEventId:0 imgUrl:imgUrl image:UIImageJPEGRepresentation(image, 1.0)];
imgInfo.isDirty = YES;
[self.imagesArray addObject:imgInfo];
NSLog(@"Image from Camera Roll %@ added to imageArray",imgUrl);
[self dismissViewControllerAnimated:YES completion:nil];
}
맞습니다.하지만 그렇게하면 선택한 이미지의 정보 (주로 파일 이름)를 가져올 수 없습니다. – Alvin
@AlvinPastore'info' 사전에'UIImagePickerControllerReferenceURL' 키를 사용하여 선택된 이미지의 원본 URL을 가져옵니다. 사진 라이브러리에서 이미지를 가져올 때 'assetURL'대신 해당 이미지를 사용하십시오. – rmaddy
고맙습니다. 파일 이름 대신 URL을 사용하기로 결정하고 ALAssetLibrary 코드 대신 직접 정보를 처리하도록 코드를 수정했습니다 (제안 된대로) ... – Alvin