使用 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.)

您只能访问沙盒环境中包含的 DocumentsLibrary 路径。将照片保存到照片库的唯一方法是使用适当的公共方法。无需检查目录是否存在,操作系统将负责管理照片库所需的所有“幕后”任务。

【讨论】:

以上是关于使用 UIImagePickerController 保存图像的主要内容,如果未能解决你的问题,请参考以下文章

相机相册

如何使用 iphone 中的核心数据将图像存储到 sqlite? [复制]

摄像头拍照上传

ViewController 生命周期 UINavigationController

iOS开发——打开手机相册,获取图片

测试使用