2012-06-21 41 views
111

私はXcode(4.3を使用)が初めてで、デバイスのカメラロールにイメージを保存する方法がわかりません。今まで私が行ったことはすべて、画像を保存するためのボタンのためのIBActionが設定されています。画像をユーザーのカメラロールに保存するには、どのようなライブラリメソッドまたは関数を使用できますか?イメージをカメラロールに保存するにはどうすればよいですか?

答えて

212

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); 
} 
+0

私が ' - (IBAction)onClickSavePhoto:(id)sender;'を持っているとします。私のViewController.hファイルで、あなたが上記のものを使って、ViewController.mファイルに置く必要があるものは何ですか?もう一度ありがとう! – user1470914

+1

@ user1470914私の編集を参照してください。また、画像をカメラロールに保存する場所はどこですか?あなたのアプリのバンドルに既に入っているのですか、またはユーザーが写真を撮ってからカメラのロールに保存しますか? – pasawaya

+0

あなたの忍耐力qegalに感謝します。私は今までこの問題を再検討する機会はなかった。あなたの編集は私達のスーパーに役立ちます。画像はアプリのバンドルにあります。アプリにはいくつかの画像があり、小さなサムネイルとして見ることができます。小さなサムネイルを選択すると、新しいビューに移動し、フルスクリーン版を表示できます。トップナビゲーターの右隅に「保存」と書かれているボタンがあり、これは画像をデバイスのカメラロールに保存して壁紙として適用できるようにするボタンです。あなたの助けと忍耐をもう一度ありがとう(なぜcasperOneがこれを閉じたか分かりません)。 – user1470914

6

、あなたは同様にビデオを保存することができます

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

またはPhotosフレームワークを使用しているiOS8

のObjective-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 3.0 
import Photos 

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 
    } 
}) 

ここでは、アップルのドキュメントにlinkです。

+0

イメージURLを取得する方法@ricardopereira –

+0

@マンシュウhttps://stackoverflow.com/a/372​​48867/3641812をご覧ください。 – ricardopereira

関連する問題