【问题标题】:How do I avoid copying duplicate images to the iPhone Photo Library?如何避免将重复的图像复制到 iPhone 照片库?
【发布时间】:2009-08-24 00:55:26
【问题描述】:

我正在编写一个简单的应用程序来将一组图像复制到用户的照片库,以便用户可以将它们用作背景。问题是如果用户多次运行该应用程序,重复的图像将被复制到照片库中。鉴于 Apple 对访问照片库内容的限制,如果有的话,避免将重复文件写入照片库的最简单方法是什么?

【问题讨论】:

    标签: iphone image file duplicates photolibrary


    【解决方案1】:

    您可以通过将已保存在应用程序中的图像数据写入文件或使用 Core Data 来存储它们,这样您就可以知道哪些已保存,哪些未保存。是的

    【讨论】:

    • 实际上,这是我想到的第一个解决方案。这种方法的问题在于,如果用户删除了一张图片,仅仅查阅以前保存的图片列表并不能反映该文件不再存在的事实,应用程序将拒绝恢复该文件。
    • 基本问题是:如果我知道一个文件的名字,我如何判断照片库中是否存在同名文件?
    • 以这种情况为例,用户从库中选择一张照片,保存它,然后将其转换为 jpeg 或 png(获取数据)并存储它。然后当用户再次选择它并且您以相同的方式获取数据时,您应该能够查看图像数据上的字节是否已经与先前存储的图像数据的字节匹配,如果是,那么您知道它是一个 dup
    • 应用程序所做的只是将我的应用程序包子目录中的所有 jpg 文件复制到照片库 (PL)。用户可以取消操作,但无法查看文件。一旦文件在 PL 中,用户可以在没有我的应用程序帮助的情况下将它们用作背景,这使我的应用程序保持简单。如果 iPhone 允许不在 PL 中的背景(是吗?),那么我可以只使用应用程序子目录(对文件访问的限制较少),但这需要编写自定义界面(如您所假设的那样)问题)查看/选择文件。
    • 你是如何让用户导出图片的?
    【解决方案2】:

    这个答案有些迟了,但迟到的答案总比没有答案好。答案是没有办法检查照片库 (PL) 中的重复图像(至少在公共 API 的限制内)。写入照片库的唯一方法是通过 UIKit 全局函数:

    void UIImageWriteToSavedPhotosAlbum (
       UIImage  *image,
       id       completionTarget,
       SEL      completionSelector,
       void     *contextInfo
    );
    

    此代码只是将 UIImage 的实例写入照片库。它的四个参数都不代表可能与图像一起保存的附加的、潜在的识别对象。它包装的 UIImage 或 CGImage 也不为此类“元数据”提供插槽。当然,总是可以继承子类,但遗憾的是没有办法检查 PL 的内容。 PL 是一个只写持久存储,其内容,至少就 API 程序员而言,本质上是匿名的。像黑洞一样,照片库有一个“单向表面”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 2010-09-15
      • 2017-01-10
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2019-03-30
      相关资源
      最近更新 更多