【问题标题】:Store and use images coming from the Camera or Album in iPad app在 iPad 应用程序中存储和使用来自相机或相册的图像
【发布时间】:2011-10-17 17:45:43
【问题描述】:

我正在开发一个 iPad 应用程序,让用户在其中创建一个对象。我还允许他/她向这个对象添加 10 张图片。他们可以从他们的相机胶卷中选择这些照片或拍摄一张新照片(如果 iPad 有相机)。

我现在的问题是存储这些图片的最佳方式是什么?在我看来,最好的方法是使用UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:finishedSavingWithError:contextInfo:), nil); 方法。这样我就可以随时存储(或使用)iPad 相册中的图像。但在这种情况下,我需要能够在数据库中存储一些东西,以便以后能够再次检索图像。那么... 如何在finishedSavingWithError:contextInfo: 方法中获取指向文件路径的 URL 以存储在数据库中?

实现我的目标的另一种方法是将它们保存到一个私人文件夹中:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
        NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
        if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
               UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
               imageView.image = image;

               [ImageManager saveImage:image atIndex:0];
       }
}

我的saveImage 方法执行以下操作:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", index]]; 
[fileManager createFileAtPath:fullPath contents:imageData attributes:nil];

或者我应该将图像作为 BLOB 存储在 sqlite 数据库中吗?

我个人认为这最后两种可能性会失败,因为基本上您将所有内容存储了两次。如果您从图库中选择图像,它将存储在本地(您的图库)PLUS 的数据库或应用程序子目录中。太浪费空间了。

在性能方面,最好的方法是什么?

另外,如果我将它们存储在一个目录中,用户可以访问该目录并删除它们吗?

感谢您分享您的智慧!

【问题讨论】:

    标签: objective-c image path camera store


    【解决方案1】:

    我认为您无法获取使用 UIImageWriteToSavedPhotosAlbum 保存的图像的 URL/路径

    即使这是可能的,我建议您仍将图像存储在您的应用中。通过将它们导出到照片应用程序,您将有效地将图像与您的应用程序和创建它们的对象分离。

    例如,如果有人从“照片”应用中删除了该图像,而没有意识到/不记得该图像与您的应用相关联,会发生什么情况?你将无法阻止这种情况。

    关于保存方法(BLOB 或文件),任何一个都可以接受。我建议您在保存之前查看调整图像大小,除非需要完整尺寸的原始图像。有很多资源可以做到这一点(例如UIImage: Resize, then Crop

    【讨论】:

    • 我不需要禁止他们删除图片。如果他们这样做,那是他们的错误,我可以检查图像是否存在。如果没有,我不会尝试加载它。但至少它可以让用户按照他们想要的方式组织图像,而且我不会使用实际需要的两倍内存容量。
    • 是的,我很欣赏它可以非常优雅地处理,我只是在考虑用户体验。 (假设您可以为应用程序调整图像大小,内存将不到两倍)。
    • 感谢您将我链接到有用的调整大小线程。那我就去找这个解决方案。将图像大小调整为 1024x768 并将其作为 BLOB 存储到数据库中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多