使用 UIImagePickerController 保存图像
Posted
技术标签:
【中文标题】使用 UIImagePickerController 保存图像【英文标题】:saving images with UIImagePickerController 【发布时间】:2012-06-18 20:14:29 【问题描述】:我正在尝试保存用户使用相机拍摄的图像
1) 如果我使用 UIImageWriteToSavedPhotosAlbum,我似乎无法分配我想要的文件名。怎么样,可以选择文件名吗?
使用此选项的好处是[picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
然后给出Photo Library目录的缩略图。
2) 这引出了我的下一个问题 [picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
可以用来从您自己的个人目录中获取图像吗?
3) 是否可以通过编程方式在照片库中创建子文件夹
4) 最后,
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSPicturesDirectory, NSUserDomainMask, YES);
if (![[NSFileManager defaultManager] fileExistsAtPath:[paths objectAtIndex:0] isDirectory:&isDir])
NSError *error;
[[NSFileManager defaultManager] createDirectoryAtPath:[paths objectAtIndex:0 withIntermediateDirectories:YES attributes:nil error:&error];
检查 NSPicturesDirectory 是否存在,以便我可以写入它 我不断收到 Cocoa 错误 513 not allowed
提前致谢
【问题讨论】:
不确定这是否是您所说的子文件夹,但如果您指的是具有自定义名称的相册,我使用了这个类别。 touch-code-magazine.com/… 您需要将图片保存在照片库而不是文档目录中,对吗? 如果一定是照片库,那就是我自己的相册/子目录。但是我需要从代码中创建专辑/子目录。与文档目录相同 【参考方案1】:您不能为照片库图像指定文件名。 ios 为保存到照片库的图像分配一个名为 asset url 的文件名,我们无法更改它。
如果您需要将图像保存到照片库,您可以使用 ALAssetsLibrary
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation) [image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error)
if (error)
// Eror
else
// Success
];
[library release];
更多信息请查看: How to save picture to iPhone photo library?
Save image in UIImageView to iPad Photos Library
【讨论】:
【参考方案2】:1.)
要保存您选择的文件名,您需要将图像保存到您的文档目录。这可以像这样轻松完成:
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
NSString *current = [NSString stringWithFormat:@"%@/%@",PHOTODATA_PATH,currentItem];
UIGraphicsBeginImageContext(CGSizeMake(160,160));
[image drawInRect:CGRectMake(0,0,160,160)];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData * thumbSize = UIImageJPEGRepresentation(scaledImage, 1.0);
[thumbSize writeToFile:[NSString stringWithFormat:@"%@_thumb.jpg",current] atomically:YES];
NSData * fullSize = UIImageJPEGRepresentation(image, 1.0);
[fullSize writeToFile:[NSString stringWithFormat:@"%@.jpg",current] atomically:YES];
[self dismissModalViewControllerAnimated:YES];
当然,此代码可能需要根据您的具体情况进行编辑,但提供了基本的理解和使用 NSData
将照片保存到文件的方法。
2.)
是的,UIImagePickerControllerSourceTypePhotoLibrary
将访问您设备上的照片库。使用此功能可以访问保存或从相机胶卷中拍摄的任何照片。
3.)
不,您不能使用您的应用程序在照片库中创建子文件夹。这可以使用 iPhoto 或 iTunes 等来完成。
4.)
您只能访问沙盒环境中包含的 Documents
和 Library
路径。将照片保存到照片库的唯一方法是使用适当的公共方法。无需检查目录是否存在,操作系统将负责管理照片库所需的所有“幕后”任务。
【讨论】:
以上是关于使用 UIImagePickerController 保存图像的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 iphone 中的核心数据将图像存储到 sqlite? [复制]