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 ?
Prenez +1 pour la réponse exacte
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 ?
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()
.
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.
Si vous voulez sauvegarder en meilleure qualité, voyez ceci : stackoverflow.com/questions/1379274/
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];
J'ai essayé de sauvegarder en utilisant ALAssetsLibrary
il faut autant de temps pour sauvegarder que pour enregistrer les données. UIImageWriteToSavedPhotosAlbum
.
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
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]
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.
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.
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.
0 votes
Vous pouvez vérifier ce code . Grande journée !