Comment enregistrer une image dans la photothèque iPhone?
193
Que dois-je faire pour enregistrer une image que mon programme a générée (éventuellement à partir de l'appareil photo, peut-être pas) dans la photothèque système de l'iPhone?
UIImageWriteToSavedPhotosAlbum(UIImage*image,
id completionTarget,
SEL completionSelector,void*contextInfo);
Vous avez seulement besoin completionTarget , completionSelector et contextInfo si vous souhaitez être averti lorsque le UIImagesauve faire, sinon vous pouvez passernil .
Salut merci pour votre excellente solution. Ici, j'ai un doute sur la façon d'éviter les doublons lors de l'enregistrement de l'image dans la photothèque. Merci d'avance.
Vous devez maintenant ajouter «Confidentialité - Description de l'utilisation des compléments de la bibliothèque de photos» à partir d'iOS 11 pour enregistrer les photos de l'album des utilisateurs.
horsejockey
1
comment donner un nom aux images enregistrées?
Priyal
63
Déconseillé dans iOS 9.0.
Il y a beaucoup plus rapide que la méthode UIImageWriteToSavedPhotosAlbum pour le faire en utilisant iOS 4.0+ AssetsLibrary framework
Existe-t-il un moyen de sauvegarder des métadonnées arbitraires avec la photo?
zakdances
2
J'ai essayé d'enregistrer en utilisant ALAssetsLibrary, cela prend juste le même temps pour enregistrer en tant que UIImageWriteToSavedPhotosAlbum.
Hlung
Et cela gèle la caméra :( Je suppose que ce n'est pas le fond supporté?
Hlung
Celui-ci est tellement plus propre b / c que vous pouvez utiliser un bloc pour gérer l'achèvement.
jpswain
5
J'utilise ce code et j'inclus ce framework #import <AssetsLibrary / AssetsLibrary.h> pas l'AVFoundation. La réponse ne devrait-elle pas être modifiée? @Denis
-(void) saveMePlease {//Loop through the array herefor(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 arrayUIImageWriteToSavedPhotosAlbum(image,nil,nil,nil);}}
Désolé pour le genre de faute de frappe qui vient de le faire à la volée, mais vous obtenez le point
// Save it to the camera roll / saved photo album// UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, nil, nil, nil) or UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image,self,"image:didFinishSavingWithError:contextInfo:",nil)
func image(image:UIImage!, didFinishSavingWithError error:NSError!, contextInfo:AnyObject!){if(error !=nil){// Something wrong happened.}else{// Everything is alright.}}
pour chaque image que vous souhaitez enregistrer, ajoutez-la à un NSMutableArray
//in the .h file put:NSMutableArray*myPhotoArray;///then in the .m-(void) viewDidLoad {
myPhotoArray =[[NSMutableArray alloc]init];}//However Your getting images-(void) someOtherMethod {UIImage*someImage =[your prefered method ofusingthis];[myPhotoArray addObject:someImage];}-(void) saveMePlease {//Loop through the array herefor(int i=0:i<[myPhotoArray count]:i++){NSString*file =[myPhotoArray 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 arrayUIImageWriteToSavedPhotosAlbum(image,nil,nil,nil);}}
Si vous ne souhaitez pas être averti de la fin de l'enregistrement de l'image, vous pouvez passer nil dans les paramètres d' achèvementTarget , d' achèvementSelector et contextInfo .
La chose importante à noter ici est que votre méthode qui observe l'enregistrement d'image devrait avoir ces 3 paramètres sinon vous rencontrerez des erreurs NSInvocation.
Réponses:
Vous pouvez utiliser cette fonction:
Vous avez seulement besoin completionTarget , completionSelector et contextInfo si vous souhaitez être averti lorsque le
UIImage
sauve faire, sinon vous pouvez passernil
.Voir la documentation officielle pour
UIImageWriteToSavedPhotosAlbum()
.la source
Déconseillé dans iOS 9.0.
Il y a beaucoup plus rapide que la méthode UIImageWriteToSavedPhotosAlbum pour le faire en utilisant iOS 4.0+ AssetsLibrary framework
la source
ALAssetsLibrary
, cela prend juste le même temps pour enregistrer en tant queUIImageWriteToSavedPhotosAlbum
.La manière la plus simple est:
Pour
Swift
, vous pouvez vous référer à Enregistrer dans la photothèque iOS à l'aide de swiftla source
Une chose à retenir: si vous utilisez un rappel, assurez-vous que votre sélecteur est conforme au formulaire suivant:
Sinon, vous vous planterez avec une erreur telle que la suivante:
[NSInvocation setArgument:atIndex:]: index (2) out of bounds [-1, 1]
la source
Passez-y simplement les images d'un tableau
Désolé pour le genre de faute de frappe qui vient de le faire à la volée, mais vous obtenez le point
la source
Lorsque vous enregistrez un tableau de photos, n'utilisez pas de boucle for, procédez comme suit
la source
Dans Swift :
la source
La fonction ci-dessous fonctionnerait. Vous pouvez copier d'ici et coller là-bas ...
la source
Swift 4
la source
ma dernière réponse le fera ..
pour chaque image que vous souhaitez enregistrer, ajoutez-la à un NSMutableArray
la source
la source
J'ai créé une catégorie UIImageView pour cela, basée sur certaines des réponses ci-dessus.
En tête de fichier:
la mise en oeuvre
Maintenant, appelez simplement cette fonction sur votre imageview:
Vous pouvez éventuellement modifier le paramètre minimumPressDuration.
la source
Dans Swift 2.2
Si vous ne souhaitez pas être averti de la fin de l'enregistrement de l'image, vous pouvez passer nil dans les paramètres d' achèvementTarget , d' achèvementSelector et contextInfo .
Exemple:
La chose importante à noter ici est que votre méthode qui observe l'enregistrement d'image devrait avoir ces 3 paramètres sinon vous rencontrerez des erreurs NSInvocation.
J'espère que ça aide.
la source
Vous pouvez utiliser ceci
la source