我有一个应用,它使用UIImagePicker
让用户拍照或从图库中选择一张照片。到目前为止,挑选和展示工作,但我需要一些指导做什么和下一步。
这是我的委托方法:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.userImageView.image = chosenImage;
[picker dismissViewControllerAnimated:YES completion:NULL];
}
因此,捕获/选定的图像可以很好地显示在UIImageView
。
保存它的最佳方法是什么?
将image
本身保存到Core Data,还是只保存在文件系统中的URL
?
如何获取文件系统中的URL?
是否重要,如果用户拍摄照片,或从图库中选择它?
任何提示,想法,赞赏,谢谢。
答案 0 :(得分:0)
您可以将image
保存到核心数据中,方法是将其转换为NSData
对象。当你想将它显示回UIImageView
时,你必须将它转换回UIImage对象。你可以通过这种方式轻松完成这项工作。
NSData* data = UIImageJPEGRepresentation(myImage, COMPRESSION_QUALITY);
通过这种方式,您可以将数据转换回图像
UIImage *image = [UIImage imageWithData:data];
这是将image
转换为data
的方式,反之亦然。您应该保存此图像的位置取决于尺寸和要求。
您可以将image
保存到核心数据,但这会使您的核心数据对象占用更多内存。如果您仍想在核心数据中保存图像,请为image
创建单独的实体,并在其他实体中为图像创建引用,这样通过错误将节省一些内存。
您还可以将文件保存在文件系统中,并将核心数据保存为字符串。
答案 1 :(得分:0)
根据Apple文档:(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdPerformance.html)
大型数据对象(BLOB)
如果您的应用程序使用大型BLOB(“二进制大对象”,如 图像和声音数据),您需要注意尽量减少开销。 “小”,“适度”和“大”的确切定义是流动的 取决于应用程序的用法。一个宽松的经验法则是 大小为千字节的对象是“适度”大小的 那些大小为兆字节的大小是“大”的。一些 开发人员使用10MB BLOB实现了良好的性能 数据库。另一方面,如果应用程序有数百万行 一个表,甚至128个字节可能是一个“适度”大小的CLOB(字符 需要将规范化为单独的表的大型对象。
通常,如果您需要将BLOB存储在持久存储中,那么 应该使用SQLite商店。 XML和二进制存储需要 整个对象图驻留在内存中,而存储写入是原子的(参见 “持久存储功能”)意味着它们不能有效 处理大型数据对象。 SQLite可以扩展以进行极端处理 大型数据库。正确使用,SQLite提供了良好的性能 数据库最高可达100GB,单行最多可容纳1GB(尽管如此) 当然,将1GB数据读入内存是一项昂贵的操作 无论存储库有多高效。)
BLOB通常表示实体的属性 - 例如,a 照片可能是Employee实体的属性。小到 适度大小的BLOB(和CLOB),您应该创建一个单独的实体 为数据和创建一个一对一的关系代替 属性。例如,您可以创建员工和照片 它们之间具有一对一关系的实体,其中 从员工到照片的关系取代了员工 照片属性。这种模式最大化了对象的好处 错误的(参见“Faulting and Uniquing”)。任何给定的照片都是 如果确实需要(如果遍历关系)则检索。
但是,如果您能够将BLOB存储为资源,那就更好了 文件系统,并保持链接(如URL或路径) 资源。然后,您可以在必要时加载BLOB。
因此,根据图像的大小,您可以在CoreData中保存路径或图像。
要保存UIImage,您必须在NSData中对其进行转换:
NSData imageData = UIImagePNGRepresentation(myImage); NSData imageData = UIImageJPEGRepresentation(myImage,QUALITY);
然后您可以将其保存在您选择的路径中:
[imageData writeToFile:fullPath atomically:YES];
我倾向于总是使用路径,即使是小图像,也能保持数据模型工作方式的连续性。