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