【问题标题】:what's the correct way to store UIImages taken in app using swift?使用swift存储在应用程序中拍摄的UIImages的正确方法是什么?
【发布时间】:2015-06-29 13:07:54
【问题描述】:

我想允许用户拍照并将这张照片附加到将存储在 CoreData 中的“人”的个人资料中。

存储此 UIImage 的典型方式是什么?

已编辑

总体而言,每个表(“Person”)将包含一些字符串和这个 UIImage。

我不希望 UIImages 占用太多空间,所以当用户拍照时,我会将其裁剪并尽可能小地保存,而不会失去视觉完整性。但这是另一种方法,以后再想办法。

知道这些 UIImage 的大小范围是多少吗?我只需要每个配置文件的头像。就像在 iPhone 上的“联系人”应用中一样,我也希望能够通过 iMessage 或电子邮件与其他人分享这个“人”。

因此,关于是否需要将整个“人”文件保留的任何建议

100kb 与相关数据存储在同一张表中

1mb 存储在通过关系附加的单独表中,以避免不必要的加载

1mb 存储在磁盘上并在 Core Data 中引用它

【问题讨论】:

  • 作为 JPEG 数据(即 CoreData 中的二进制 NSData)将是一个合理的起点。 (参见UIImageJPEGRepresentation)如果照片“大”,您可能希望将它们作为纯文件保存在文件系统中,CoreData 中只有路径名等
  • 我的应用不需要照片很大,只需要一张个人资料图片,这样用户就可以记住这个人是谁......就像 iPhone 上的“联系人”一样。

标签: ios iphone swift uiimage


【解决方案1】:

您可以在您的核心数据模型中使用 Transformable 类型 - 这样您就可以存储符合 NSCoding 的任何对象,其中包括 UIImage。您的图片将有效地保存在数据库中,这可能对您的应用更方便。

为了提高性能,还有一个允许外部存储的设置。小文件,只会以二进制形式存储在数据库中;较大的文件,将被写入外部文件。这样做的好处是它对您来说是透明的。

查看这个问题了解更多详情:Storing UIImage in Core Data with the new External Storage flag

【讨论】:

  • 将图像放在数据库中听起来像是要走的路,因为我将处理仅用于视觉参考的小图像。我编辑了一个问题太长而无法放入 cmets 的帖子。泰
【解决方案2】:

这里的代码将帮助您将UIImage 存储在document directory 中,然后将document path 存储到您的数据库中。

let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) {
    if paths.count > 0 {
        if let dirPath = paths[0] as? String {

            let writePath = dirPath.stringByAppendingPathComponent("Image2.png") 
            UIImagePNGRepresentation(image).writeToFile(writePath, atomically: true)
        }
    }
}

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 2012-08-17
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多