如何在 iOS 上为 kCGImagePropertyRawDictionary 设置元数据?

Posted

技术标签:

【中文标题】如何在 iOS 上为 kCGImagePropertyRawDictionary 设置元数据?【英文标题】:How to set metadata for kCGImagePropertyRawDictionary on iOS? 【发布时间】:2017-04-07 19:22:41 【问题描述】:

您好,我正在尝试在图像中设置自定义信息。这里的文档:https://developer.apple.com/reference/imageio/kcgimagepropertyrawdictionary 说这是一个用于最小数据的字典。

据我了解,我可以在图像中存储一些字符串或 NSData。

ios 不允许设置未在 CGImageProperties 中列出的元数据。我在 kCGImagePropertyRawDictionary 下找不到任何可能的键。我也尝试直接将其设置为字符串。所有这些都失败了。

有人知道如何设置 kCGImagePropertyRawDictionary 的值吗?

【问题讨论】:

【参考方案1】:

据我了解,我可以在图像中存储一些字符串或 NSData。

是的,图像元数据的目的是存储图像元数据。这可以包括数字、布尔值和——最常见的——字符串。但是,元数据系统并不是为任意元数据设计的——每个值都有特定的用途。为了强制执行此目的,CGImageDestinationAddImage 会静默删除它认为无效的任何值。在传递给该函数的properties 字典中允许使用一组固定的键,它是destination properties 和CGImageProperties 的联合。

您已经正确地注意到kCGImagePropertyRawDictionary 就是这样一个允许的密钥。但是,它的值本身必须是一个字典,并且文档没有指定在那里可以接受哪些键——如果是这样,那将在 CGImageProperties 页面上列为“RAW Dictionary Keys”。因此,该字典没有允许的键。如果您想存储不属于 CGImageProperties 中描述的(许多)类别之一的图像数据,则必须将其存储在其他位置。


只是为了好玩,因为我很好奇,我在ImageIO 框架上运行了strings,并找到了一个包含约300 个字符串常量的列表,这些常量看起来像是这个字典的可能键。我写了一个quick test program 来尝试将这些键中的每一个放入kCGImagePropertyRawDictionary 键的字典中。没有一个人通过。这让我觉得kCGImagePropertyRawDictionary 只是为了将来使用,目前不接受任何元数据。

【讨论】:

感谢您的回复。苹果似乎应该删除这个密钥。

以上是关于如何在 iOS 上为 kCGImagePropertyRawDictionary 设置元数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone、iOS 8 上为弹出框设置动画

IOS-如何在情节提要上为通用设备的 UIscrollview 设置框架?

如何在键盘外观上为 Flutter 布局设置动画

从 iOS 设备上为测试中的应用程序获取文件

在 iOS 的不同设备上为同一个项目使用不同的文件?

Android - 如何在 Google 地图上为 Google 徽标设置底部填充