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]; 
} 

답변

3

만 저장 picker.sourceTypeUIImagePickerControllerSourceTypeCamera과 같으면 카메라 롤에 표시됩니다.

+0

맞습니다.하지만 그렇게하면 선택한 이미지의 정보 (주로 파일 이름)를 가져올 수 없습니다. – Alvin

+0

@AlvinPastore'info' 사전에'UIImagePickerControllerReferenceURL' 키를 사용하여 선택된 이미지의 원본 URL을 가져옵니다. 사진 라이브러리에서 이미지를 가져올 때 'assetURL'대신 해당 이미지를 사용하십시오. – rmaddy

+0

고맙습니다. 파일 이름 대신 URL을 사용하기로 결정하고 ALAssetLibrary 코드 대신 직접 정보를 처리하도록 코드를 수정했습니다 (제안 된대로) ... – Alvin