iPhone:如何获得用UIImageWriteToSavedPhotosAlbum()保存的图像的文件path?

我正在使用以下命令将合并的图像保存到iPhone照片库:

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

并获取callback使用:

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

我想得到的是保存图像的path,所以我可以将它添加到一个数组中,该数组将用于调用应用程序中其他位置保存的项目列表。

当我使用选取器加载图像时,它显示path信息。 但是,当我保存一个创build的图像,我找不到在哪里拉保存的图像path。

我有关于networking的search,但是大多数例子都停留在callback中,并且有一个很好的消息来说图像已经成功保存。 我只想知道它被保存在哪里。

我知道一种方法可能是开始定义我自己的path,但是由于这个方法对我来说,我只是希望它能告诉我它保存在哪里。

这是我的第一个关于堆栈溢出的问题,所以如果我不知道正确的礼节,那么原谅我,因为似乎有很多。

谢谢。

我终于找出答案。 显然,UIImage方法去掉元数据,所以使用UIImageWriteToSavedPhotosAlbum是不好的。

然而在ios4中,苹果公司提出了一个新的框架来处理称为ALAssetsLibrary的照片库。

首先,您需要右键单击目标,然后在构build部分中,使用左下angular的小图标将AlAsset Framework添加到您的项目中。

然后添加#import "AssetsLibrary/AssetsLibrary.h"; 到你的类的头文件。

最后你可以使用下面的代码:

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

这就得到了你刚刚保存的文件的path。

我的代码是

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

在.h中导入库并定义ALAssetsLibraryWriteImageCompletionBlock的typesdef

 #import <UIKit/UIKit.h> #import <AssetsLibrary/AssetsLibrary.h> typedef void (^ALAssetsLibraryWriteImageCompletionBlock)(NSURL *assetURL, NSError *error); 

如果您不知道如何获取<AssetsLibrary/AssetsLibrary.h> ,请添加现有的框架(AssetsLibrary.framework)

迅捷版将会

  ALAssetsLibrary().writeImageToSavedPhotosAlbum(editedImage.CGImage, orientation: ALAssetOrientation(rawValue: editedImage.imageOrientation.rawValue)!, completionBlock:{ (path:NSURL!, error:NSError!) -> Void in print("\(path)") }) 

和“导入ALAssetsLibrary”在您的文件。

项目 – >构build阶段 – >链接二进制 – > AssetsLibrary.framework

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