199 votes

Comment enregistrer une photo dans la photothèque de l'iPhone ?

Que dois-je faire pour enregistrer une image générée par mon programme (peut-être à partir de l'appareil photo, peut-être pas) dans la photothèque du système sur l'iPhone ?

0 votes

Vous pouvez vérifier ce code . Grande journée !

417voto

Martin Gordon Points 19587

Vous pouvez utiliser cette fonction :

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

Vous avez seulement besoin cible d'achèvement , sélecteur d'achèvement y contextInfo si vous voulez être informé lorsque le UIImage a été sauvegardé, sinon vous pouvez passer dans nil .

Voir le la documentation officielle pour UIImageWriteToSavedPhotosAlbum() .

0 votes

Prenez +1 pour la réponse exacte

0 votes

Bonjour, merci pour votre excellente solution. J'ai un doute : comment éviter les doublons lors de l'enregistrement d'une image dans la photothèque ? Merci d'avance.

0 votes

Si vous voulez sauvegarder en meilleure qualité, voyez ceci : stackoverflow.com/questions/1379274/

63voto

Denis Fileev Points 511

Déclassé dans iOS 9.0.

Il existe un moyen beaucoup plus rapide que UIImageWriteToSavedPhotosAlbum pour le faire en utilisant le cadre AssetsLibrary d'iOS 4.0+.

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

1 votes

Existe-t-il un moyen d'enregistrer des métadonnées arbitraires avec la photo ?

3 votes

J'ai essayé de sauvegarder en utilisant ALAssetsLibrary il faut autant de temps pour sauvegarder que pour enregistrer les données. UIImageWriteToSavedPhotosAlbum .

0 votes

Et cela fige la caméra :( Je suppose que le fond n'est pas supporté ?

33voto

Mutawe Points 3348

La méthode la plus simple est la suivante :

UIImageWriteToSavedPhotosAlbum(myUIImage, nil, nil, nil);

Pour Swift vous pouvez vous référer à Enregistrement dans la photothèque iOS à l'aide de swift

3 votes

J'aime beaucoup l'icône de votre profil utilisateur SO. Une image Xcode plutôt cool.

1 votes

Fantastiquement simple, et très très facile !

13voto

Jeff C. Points 31

Une chose à retenir : si vous utilisez un callback, assurez-vous que votre sélecteur se conforme à la forme suivante :

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

Sinon, vous vous planterez avec une erreur telle que la suivante :

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

10voto

mrburns05 Points 136

Il suffit de lui passer les images d'un tableau comme suit

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

Désolé pour les fautes de frappe, j'ai fait ça à la volée, mais vous avez compris.

0 votes

En utilisant cette méthode, certaines photos manqueront, je l'ai essayé. La manière correcte de le faire est d'utiliser le rappel du sélecteur d'achèvement.

1 votes

Peut-on sauvegarder les images avec le nom personnalisé ?

0 votes

Il ne faut jamais utiliser de boucle for pour cela. Cela conduit à une condition de course et à des plantages.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X