web-dev-qa-db-fra.com

Comment puis-je enregistrer une image sur la pellicule?

Je suis nouveau sur Xcode (avec la version 4.3) et je ne sais pas comment enregistrer une image sur la pellicule de l'appareil. Tout ce que j'ai fait jusqu'à présent est de configurer IBAction pour que le bouton enregistre l'image. Quelle méthode ou fonction de bibliothèque puis-je utiliser pour enregistrer une image sur la pellicule de l'utilisateur?

122
user1470914

Vous utilisez la fonction UIImageWriteToSavedPhotosAlbum() .

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

Modifier:

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

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

Voici une réponse pour iOS8 + en utilisant le framework Photos.

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

Rapide:

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

Voici un lien vers la documentation Apple).

N'oubliez pas d'ajouter la clé/valeur appropriée à votre info.plist pour demander l'autorisation d'accéder à la photothèque:

<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>
53
digitalHound

Pour référence, vous pouvez enregistrer des vidéos de la même manière:

UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil);

Vous voudrez peut-être enregistrer une vidéo à télécharger sur Instagram, par exemple:

// 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];
}
9
Graham Perks

Enregistrez l'image dans la photothèque dans Swift 4

Ensuite, utilisez le code suivant pour enregistrer l'image

UIImageWriteToSavedPhotosAlbum(imageView.image!, nil, nil, nil)
3
Mahesh Chaudhari