51 votes

iPhone: Comment puis-je obtenir le chemin d'accès du fichier d'une image enregistrée avec UIImageWriteToSavedPhotosAlbum()?

Je l'enregistrement d'une image fusionnée à la bibliothèque photo de l'iPhone à l'aide de:

UIImageWriteToSavedPhotosAlbum(viewImage, self, @selector(savedPhotoImage:didFinishSavingWithError:contextInfo:), nil);

Et d'obtenir le rappel à l'aide:

- (void) savedPhotoImage:(UIImage*)image didFinishSavingWithError:(NSError *)error contextInfo: (void *)contextInfo { NSLog(@"%@", [error localizedDescription]);
NSLog(@"info: %@", contextInfo);}

Ce que je voudrais obtenir est le chemin par où l'image a été enregistrée, afin que je puisse l'ajouter à un tableau qui sera utilisé pour appeler une liste des éléments sauvegardés ailleurs dans l'application.

Lorsque je charge l'image à l'aide du sélecteur, il affiche le chemin d'accès de l'info. Cependant, lorsque j'enregistre une image créée, je ne trouve pas où tirer l'image enregistrée chemin.

J'ai recherche sur le web, mais la plupart des exemples d'arrêt à la fonction de rappel avec un joli message pour dire que l'image a été enregistrée avec succès. Je voudrais juste être en mesure de savoir où il a été enregistré.

Je comprends une méthode pourrait être de commencer à définir mon propre chemin, mais comme cette méthode ne convient que pour moi, j'espérais juste qu'il pourrait me dire où il enregistré.

C'est ma première question sur un Débordement de Pile, donc pardonnez-moi si je ne sais pas la bonne étiquette, comme il semble y avoir beaucoup.

Merci.

86voto

Ben Points 815

J'ai enfin trouvé la réponse. Apparemment, le UIImage méthodes d'en extraire les métadonnées et l'utilisation de UIImageWriteToSavedPhotosAlbum n'est pas bon.

Cependant, dans la version ios4 d'Apple de mettre dans un nouveau cadre pour gérer la bibliothèque de photos appelé le ALAssetsLibrary.

Tout d'abord vous devez faire un clic droit sur les Objectifs et dans la construction de la partie, ajouter le AlAsset Cadre de votre projet avec la petite icône + en bas à gauche.

Puis ajouter #import "AssetsLibrary/AssetsLibrary.h"; le 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 qui obtient le chemin d'accès du fichier que vous venez d'enregistrer.

3voto

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 .h Bibliothèque d'importation et de définir le type de 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 de l' <AssetsLibrary/AssetsLibrary.h>, s'il vous plaît ajouter cadre existant (AssetsLibrary.cadre)

0voto

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

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