Je sauvegarde une image fusionnée dans la photothèque iPhone en utilisant:
UIImageWriteToSavedPhotosAlbum(viewImage, self, @selector(savedPhotoImage:didFinishSavingWithError:contextInfo:), nil);
Et obtenir le rappel en utilisant:
- (void) savedPhotoImage:(UIImage*)image didFinishSavingWithError:(NSError *)error contextInfo: (void *)contextInfo { NSLog(@"%@", [error localizedDescription]);
NSLog(@"info: %@", contextInfo);}
Ce que j'aimerais obtenir, c'est le chemin d'accès à l'endroit où l'image a été enregistrée. Je peux donc l'ajouter à un tableau qui sera utilisé pour appeler une liste d'éléments enregistrés ailleurs dans l'application.
Lorsque je charge l'image à l'aide du sélecteur, il affiche les informations relatives au chemin d'accès. Cependant, lorsque je sauvegarde une image créée, je ne trouve pas où extraire le chemin de l'image enregistrée.
J'ai une recherche sur le Web, mais la plupart des exemples s'arrêtent au rappel avec un message de Nice pour indiquer que l'image a été enregistrée avec succès .. Je voudrais simplement savoir où elle a été enregistrée.
Je comprends qu'une méthode peut être de commencer à définir mes propres chemins, mais comme cette méthode le fait pour moi, j'espérais juste qu'elle pourrait me dire où elle était sauvegardée.
J'ai finalement trouvé la réponse… .. Apparemment, les méthodes UIImage suppriment les métadonnées et donc, utiliser UIImageWriteToSavedPhotosAlbum n'est pas bon.
Cependant, dans ios4, Apple a mis en place un nouveau cadre pour gérer la photothèque appelée ALAssetsLibrary.
Vous devez d’abord faire un clic droit sur les cibles et dans la partie construction, ajouter le cadre AlAsset à votre projet avec la petite icône + en bas à gauche.
Ajoutez ensuite #import "AssetsLibrary/AssetsLibrary.h";
au fichier d’en-tête de votre classe.
Enfin, vous pouvez utiliser le code suivant:
UIImage *viewImage = YOUR UIIMAGE // --- mine was made from drawing context
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
// Request to save the image to camera roll
[library writeImageToSavedPhotosAlbum:[viewImage CGImage] orientation:(ALAssetOrientation)[viewImage imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){
if (error) {
NSLog(@"error");
} else {
NSLog(@"url %@", assetURL);
}
}];
[library release];
Et cela obtient le chemin du fichier que vous venez de sauvegarder.
Mon code est
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
imageURL = nil;
ALAssetsLibraryWriteImageCompletionBlock completeBlock = ^(NSURL *assetURL, NSError *error){
if (!error) {
#pragma mark get image url from camera capture.
imageURL = [NSString stringWithFormat:@"%@",assetURL];
}
};
if(image){
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:[image CGImage]
orientation:(ALAssetOrientation)[image imageOrientation]
completionBlock:completeBlock];
}
}
dans la bibliothèque d'importation .h et définissez le type def de ALAssetsLibraryWriteImageCompletionBlock
#import <UIKit/UIKit.h>
#import <AssetsLibrary/AssetsLibrary.h>
typedef void (^ALAssetsLibraryWriteImageCompletionBlock)(NSURL *assetURL, NSError *error);
si vous ne savez pas comment obtenir <AssetsLibrary/AssetsLibrary.h>
, veuillez ajouter le framework existant (AssetsLibrary.framework)
Version Swift 4.1 de la réponse d'OlivaresF
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAsset(from: image)
}) { (success, error) in
if success {
} else {
}
}
Swift Version sera
ALAssetsLibrary().writeImageToSavedPhotosAlbum(editedImage.CGImage, orientation: ALAssetOrientation(rawValue: editedImage.imageOrientation.rawValue)!,
completionBlock:{ (path:NSURL!, error:NSError!) -> Void in
print("\(path)")
})
Et "importer ALAssetsLibrary" dans votre fichier.
Projet-> Build Phases -> Link binary -> AssetsLibrary.framework
ALAssetsLibrary est obsolète.
Voici comment vous devriez le faire:
#import <Photos/Photos.h>
UIImage *yourImage;
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
[PHAssetChangeRequest creationRequestForAssetFromImage:yourImage];
} completionHandler:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"Success");
} else {
NSLog(@"write error : %@",error);
}
}];
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo {
RandomIndexnew = arc4random() % 3;
if(RandomIndexnew == 0)
{
nameStr =[NSString stringWithFormat:@"jpg"];
textFieldNormalFile_type.text =[NSString stringWithFormat:@"jpg"];
}
else if(RandomIndexnew = 1)
{
nameStr =[NSString stringWithFormat:@"gif"];
textFieldNormalFile_type.text =[NSString stringWithFormat:@"GIF"];
}
else if(RandomIndexnew = 2)
{
nameStr =[NSString stringWithFormat:@"jpg"];
textFieldNormalFile_type.text =[NSString stringWithFormat:@"JPG"];
}
RandomIndex = arc4random() % 20;
NSString *nameStr1 =[NSString stringWithFormat:@"Image%i",RandomIndex];
textFieldNormalFile_name.text =[NSString stringWithFormat:@"%@.%@",nameStr1,nameStr];
newFilePath = [NSHomeDirectory() stringByAppendingPathComponent: textFieldNormalFile_name.text];
imageData = UIImageJPEGRepresentation(img, 1.0);
if (imageData != nil) {
NSLog(@"HERE [%@]", newFilePath);
[imageData writeToFile:newFilePath atomically:YES];
}
image.image =[UIImage imageNamed:newFilePath];
NSLog(@"newFilePath:%@",newFilePath);
path.text =[NSString stringWithFormat:newFilePath];
NSLog(@"path.text :%@",path.text);
}
La réponse d'OlivariesF manque la partie clé de cette question, récupérez le chemin:
Voici un extrait de code qui fait tout:
- (void)processImage:(UIImage*)image type:(NSString*)mimeType forCallbackId:(NSString*)callbackId
{
__block NSString* localId;
// Add it to the photo library
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest *assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
localId = [[assetChangeRequest placeholderForCreatedAsset] localIdentifier];
} completionHandler:^(BOOL success, NSError *err) {
if (!success) {
NSLog(@"Error saving image: %@", [err localizedDescription]);
} else {
PHFetchResult* assetResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[localId] options:nil];
PHAsset *asset = [assetResult firstObject];
[[PHImageManager defaultManager] requestImageDataForAsset:asset
options:nil
resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
NSURL *fileUrl = [info objectForKey:@"PHImageFileURLKey"];
if (fileUrl) {
NSLog(@"Image path: %@", [fileUrl relativePath]);
} else {
NSLog(@"Error retrieving image filePath, heres whats available: %@", info);
}
}];
}
}];
}