카메라 롤에 이미지를 저장하려면 어떻게해야합니까?


126

Xcode (4.3 사용)를 처음 사용하고 장치의 카메라 롤에 이미지를 저장하는 방법을 잘 모르겠습니다. 내가 지금까지 한 모든 것은 이미지를 저장하는 버튼에 대한 IBAction을 설정하는 것입니다. 이미지를 사용자의 카메라 롤에 저장하기 위해 어떤 라이브러리 방법이나 기능을 사용할 수 있습니까?

답변:


238

UIImageWriteToSavedPhotosAlbum()기능을 사용합니다 .

//Let's say the image you want to save is in a UIImage called "imageToBeSaved"
UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil);

편집하다:

//ViewController.m
- (IBAction)onClickSavePhoto:(id)sender{

    UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil);
}

'-(IBAction) onClickSavePhoto : (id) sender;'가 있다고 가정 해 보겠습니다. ViewController.h 파일에서 위의 내용을 사용하여 ViewController.m 파일에 정확히 무엇이 있어야합니까? 다시 한번 감사합니다!
user1470914

1
@ user1470914 내 편집 내용을 참조하십시오. 또한 카메라 롤에 이미지를 저장할 위치는 어디입니까? 이미 앱 번들에 포함되어 있거나 사용자가 사진을 촬영 한 다음 카메라 롤에 저장합니까?
pasawaya

양해 해 주셔서 감사합니다. 지금까지이 문제를 다시 방문 할 기회가 없었습니다. 당신의 편집은 우리에게 매우 도움이됩니다. 이미지는 앱 번들에 있습니다. 앱에는 여러 이미지가 있으며 작은 축소판 그림으로 볼 수 있습니다. 작은 섬네일을 선택하면 새로운보기로 이동하여 전체 화면 버전을 볼 수 있습니다. 상단 탐색 메뉴의 오른쪽 모서리에 "저장"이라는 버튼이 있으며 이는 이미지를 기기의 카메라 롤에 저장하여 배경 화면으로 적용 할 수있는 버튼입니다. 귀하의 도움과 인내심에 다시 한 번 감사드립니다.
user1470914

또한 UIImageView *imageToBeSaved;.h 파일에 추가 했습니다. @synthesize imageToBeSaved.m 을 추가해야한다고 생각 했지만 "속성 구현 선언에 대한 컨텍스트 누락"이라는 오류가 발생합니다.
user1470914

4
iOS10부터 plist에서 NSPhotoLibraryUsageDescription 키를 사용해야합니다. 그렇지 않으면 앱이 충돌합니다.
ASLLOP

56

사진 프레임 워크를 사용하는 iOS8 +에 대한 답변입니다.

목표 -C :

#import <Photos/Photos.h>

UIImage *snapshot = self.myImageView.image;

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:snapshot];
    changeRequest.creationDate          = [NSDate date];
} completionHandler:^(BOOL success, NSError *error) {
    if (success) {
        NSLog(@"successfully saved");
    }
    else {
        NSLog(@"error saving to photos: %@", error);
    }
}];

빠른:

// Swift 4.0
import Photos

let snapshot: UIImage = someImage

PHPhotoLibrary.shared().performChanges({
    PHAssetChangeRequest.creationRequestForAsset(from: snapshot)
}, completionHandler: { success, error in
    if success {
        // Saved successfully!
    }
    else if let error = error {
        // Save photo failed with error
    }
    else {
        // Save photo failed with no error
    }
})

다음 은 Apple 설명서에 대한 링크 입니다.

사진 라이브러리에 액세스 할 수있는 권한을 요청하려면 info.plist에 적절한 키 / 값을 추가해야합니다.

<key>NSCameraUsageDescription</key>
<string>Enable camera access to take photos.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Enable photo library access to select a photo from your library.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Enable photo library access to save images to your photo library directly from the app.</string>

2
이미지 URL의 @ricardopereira 얻을 수있는 방법
Mansuu ....


9

참고로 비슷한 방식으로 비디오를 저장할 수 있습니다.

UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil);

Instagram에 업로드 할 비디오를 저장할 수 있습니다 (예 :

// Save video to camera roll; we can share to Instagram from there.
-(void)didTapShareToInstagram:(id)sender { 
    UISaveVideoAtPathToSavedPhotosAlbum(self.videoPath, self, @selector(video:didFinishSavingWithError:contextInfo:), (void*)CFBridgingRetain(@{@"caption" : caption}));
}

- (void)               video: (NSString *) videoPath
    didFinishSavingWithError: (NSError *) error
                 contextInfo: (void *) contextInfoPtr {

    NSDictionary *contextInfo = CFBridgingRelease(contextInfoPtr);
    NSString *caption         = contextInfo[@"caption"];

    NSString *escapedString   = [videoPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; // urlencodedString
    NSString *escapedCaption  = [caption stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; // urlencodedString

    NSURL *instagramURL       = [NSURL URLWithString:[NSString stringWithFormat:@"instagram://library?AssetPath=%@&InstagramCaption=%@", escapedString, escapedCaption]];

    [[UIApplication sharedApplication] openURL:instagramURL];
}

4

Swift 4의 사진 라이브러리에 이미지 저장

info.plist에서 "개인 정보 보호-사진 라이브러리 추가 사용법 설명"추가

그런 다음 다음 코드를 사용하여 이미지를 저장하십시오.

UIImageWriteToSavedPhotosAlbum(imageView.image!, nil, nil, nil)

0

카메라 롤에 저장할 고유 한 내용을 얻으려면 asImage ()를 사용하십시오.

asImage ()를 사용하면 몇 줄의 코드만으로 다양한 재미있는 것을 카메라 롤에 저장할 수 있습니다! 객체에 투명도가 이미 포함되어 있으면 매우 강력 할 수 있습니다.

asImage ()는 UITextView, WKWebView, UIImageView, UIButton, UISlider, UITableView와 함께 작동하여 일부 객체의 이름을 지정합니다 (그러나 알파가 아닌 이미지를 얻을 때 표시되어야 할 수도 있음). 타일링을 캡처하는데도 사용하지만 디자인에 이미 UIImageView에로드되어 있습니다. asImage ()가 더 많은 객체 유형에서도 작동 할 수 있다고 생각하지만 언급 한 것만 시도했습니다.

UITextView이고 배경색을 .clear로 설정하면 텍스트가 투명한 배경으로 저장됩니다. 텍스트에 그림 이모티콘 또는 그림 이모티콘이 포함 된 경우 이제 해당 이미지를 카메라 롤 또는 앱 내부의 UIImageView로 가져올 수 있습니다. 다양한 응용 분야에서 사용할 수있는 카메라 롤의 투명한 배경을 가진 Memoji / Emoji를 사용하는 것이 강력합니다.

사진 이미지를 원으로 자르거나 모퉁이 반경을 설정하여 모퉁이를 잘라 내면 다른 개체에 약간의 투명성이있을 수 있습니다.

내 코드에서 pointerToTextObjectSelected는 UITextView입니다.


var pointerToTextObjectSelected = UITextView()
// above populated elsewhere

let thisObject = pointerToTextObjectSelected.asImage()

let imageData = thisObject.pngData()

let imageToSave = UIImage(data: imageData!)

UIImageWriteToSavedPhotosAlbum(imageToSave!, nil, nil, nil)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.