【问题标题】:Storing UIImage as NSData returns different results将 UIImage 存储为 NSData 会返回不同的结果
【发布时间】:2012-07-01 23:17:16
【问题描述】:

我正在构建一个允许用户查看网站图片的应用。我将图片加载到屏幕上,然后一旦用户点击其中一张,我就可以选择将其添加到他的收藏夹中。

为了让他离线查看图像,我将 UIImageJpegRepresentation 存储在 NSMutableDictionary 中,该字典稍后会进入 NSUserDefaults。

当用户在在线图像查看部分时,如果他遇到喜欢的图像,他可以将其从收藏夹中删除(我通过将 NSData 与我存储到 NSUserDefaults 中的内容进行比较来检查这是否是他的最爱之一)。

现在的问题是:当用户进入收藏夹部分并从 NSUserDefaults 加载图像时,NSUserDefaults 中的 NSData 与屏幕上图像视图中图像的 NSData 的比较失败。因此,当他在收藏夹部分点击图像时,并没有检测到图像本身是 NSUserDefaults 中的收藏夹,我认为这两个 NSData 出于某种原因是不同的。

有人能解释一下为什么会发生这种情况并可能给出解决方法的提示吗?

【问题讨论】:

    标签: objective-c ios5 uiimageview uiimage nsdata


    【解决方案1】:

    UIImageJPEGRepresentation 可能会以不同的方式压缩图像——JPEG 是一种有损格式。

    除此之外,这似乎不是实现您既定目标的最佳方式。如果用户正在查看很多图像并且有很多喜欢的图像,那么这将表现得很差。更好的解决方案是存储某种图像 ID,例如一个网址。比较 URL 字符串可能比比较整个图像快几个数量级。

    【讨论】:

    • 是的,我同意。但唯一的问题是,如果我要存储 URL,用户将无法离线查看任何内容。而且我只打算存储大约 100 张图像。是不是太过分了?
    • 如果您愿意,您也可以存储图像。如果您热衷于将它们保存在NSUserDefaults(而不是文件系统,这可能更可取),您可以存储一个NSDictionary 的 URL -> 图像映射。如果字典有一个 URL 作为键,你就知道该图像已被收藏。
    • 抱歉这么久才回复。那么你的意思是将 URL -> 图像文件名存储到字典中?因此,基本上我会将存储的图像文件与我在屏幕上加载的文件进行比较,因此比较时间更少,NSUserDefaults 中使用的内存也更少,对吗?
    猜你喜欢
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    相关资源
    最近更新 更多