[ios] 아이폰 사진 보관함에 사진을 저장하는 방법?

내 프로그램에서 생성 한 이미지를 카메라에서 (아마도 아닐 수도 있음) iPhone의 시스템 사진 라이브러리에 저장하려면 어떻게해야합니까?



답변

이 기능을 사용할 수 있습니다 :

UIImageWriteToSavedPhotosAlbum(UIImage *image,
                               id completionTarget,
                               SEL completionSelector,
                               void *contextInfo);

저장이 완료 되면 알림을 받으려면 completionTarget , completionSelectorcontextInfo 만 필요합니다 . UIImage그렇지 않으면을 전달할 수 있습니다 nil.

에 대한 공식 문서를UIImageWriteToSavedPhotosAlbum() 참조하십시오 .


답변

iOS 9.0에서 사용되지 않습니다.

iOS 4.0 + AssetsLibrary 프레임 워크를 사용하여 UIImageWriteToSavedPhotosAlbum 방법보다 훨씬 빠릅니다.

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

    [library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){
    if (error) {
    // TODO: error handling
    } else {
    // TODO: success handling
    }
}];
[library release];


답변

가장 간단한 방법은 다음과 같습니다.

UIImageWriteToSavedPhotosAlbum(myUIImage, nil, nil, nil);

의 경우 swift를 사용하여 iOS 사진 라이브러리Swift저장을 참조하십시오.


답변

기억해야 할 사항 : 콜백을 사용하는 경우 선택기가 다음 형식을 준수하는지 확인하십시오.

- (void) image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo;

그렇지 않으면 다음과 같은 오류가 발생합니다.

[NSInvocation setArgument:atIndex:]: index (2) out of bounds [-1, 1]


답변

배열에서 이미지를 이렇게 전달하십시오.

-(void) saveMePlease {

//Loop through the array here
for (int i=0:i<[arrayOfPhotos count]:i++){
         NSString *file = [arrayOfPhotos objectAtIndex:i];
         NSString *path = [get the path of the image like you would in DOCS FOLDER or whatever];
         NSString *imagePath = [path stringByAppendingString:file];
         UIImage *image = [[[UIImage alloc] initWithContentsOfFile:imagePath]autorelease];

         //Now it will do this for each photo in the array
         UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
        }
}

오타가 죄송합니다. 방금이 작업을 수행했지만 요점을 알 수 있습니다.


답변

사진 배열을 저장할 때 for 루프를 사용하지 말고 다음을 수행하십시오.

-(void)saveToAlbum{
   [self performSelectorInBackground:@selector(startSavingToAlbum) withObject:nil];
}
-(void)startSavingToAlbum{
   currentSavingIndex = 0;
   UIImage* img = arrayOfPhoto[currentSavingIndex];//get your image
   UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
- (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo{ //can also handle error message as well
   currentSavingIndex ++;
   if (currentSavingIndex >= arrayOfPhoto.count) {
       return; //notify the user it's done.
   }
   else
   {
       UIImage* img = arrayOfPhoto[currentSavingIndex];
       UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
   }
}


답변

에서 스위프트 :

    // Save it to the camera roll / saved photo album
    // UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, nil, nil, nil) or 
    UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, self, "image:didFinishSavingWithError:contextInfo:", nil)

    func image(image: UIImage!, didFinishSavingWithError error: NSError!, contextInfo: AnyObject!) {
            if (error != nil) {
                // Something wrong happened.
            } else {
                // Everything is alright.
            }
    }