iPhone ImageIO没有返回图片的所有元数据

时间:2012-12-16 14:13:21

标签: objective-c metadata exif javax.imageio

我目前正在尝试创建一个简单的库,以面向对象的方式访问图片元数据(不再使用字典)。我遇到了很多奇怪的错误:

  1. 即使定义了kCGImagePropertyMakerMinoltaDictionarykCGImagePropertyMakerFujiDictionarykCGImagePropertyMakerOlympusDictionarykCGImagePropertyMakerPentaxDictionary个键,在编译项目时也会出现错误,说明它们未定义:

    架构armv7的未定义符号:   “_kCGImagePropertyMakerMinoltaDictionary”,引自:        - SYMetadata.o中的[SYMetadata metadataMakerMinolta] ld:找不到架构armv7

  2. 的符号
  3. kCGImagePropertyExifBodySerialNumber也是来自ImageIO/CGImageProperties.h的已定义键,但在iOS 5.1.1中加载项目时,我收到错误消息,说明它不可用:

    dyld:未找到符号:_kCGImagePropertyExifBodySerialNumber   参考自:/var/mobile/Applications/0D8144E6-6313-4347-B503-247F5ACC0A11/ConnectTIG.app/ConnectTIG   预期在:/System/Library/Frameworks/ImageIO.framework/ImageIO  在/var/mobile/Applications/0D8144E6-6313-4347-B503-247F5ACC0A11/ConnectTIG.app/ConnectTIG

  4. Apple有很多可能的元数据字典键,例如kCGImagePropertyMakerNikonDictionary,它们存在但不起作用。例如,我用我的尼康D3100拍摄的照片:当我在我的Mac上使用预览应用程序打开它时,我可以访问尼康元数据,但是当我在iPhone上获得所有键和值时,我没有这些信息。

  5. 我在Moutain Lion 10.8.2上运行XCode 4.5.2(最后稳定版本AFAIK)。我尝试在设备和模拟器上编译/运行,结果相同。

    由于这将是一个公共图书馆,我已经在我的github回购中拥有了所有内容:https://github.com/dvkch/SYPictureMetadata

    那些愿意发现这些错误来自哪里的人欢迎随时使用代码并提交推送请求。

    如果您有任何可能的想法,我们将非常感激!

    斯坦

1 个答案:

答案 0 :(得分:1)

我很确定SDK有问题。您获得的错误是SDK中定义的符号,但实际上并不存在。我已经检查了你的项目,你已经将ImageIO.framework包含在所有已定义的内容中,而且其他所有键都可以正常工作。 kCGImagePropertyMakerNikonCameraSerialNumber有效,但kCGImagePropertyMakerMinoltaDictionary没有。

如果你看一下CGImageProperties文档的顶部,它说框架是“ApplicationServices / ImageIO”。这是不可能的,iOS上不存在ApplicationServices。本文档中至少有一个错误。显然,他们已经逐字复制了OSX文档。

我肯定会就此问题和文档提交错误报告。

OSX上的FWIW这些键(在iOS上可能是相同的)如下:

{MakerCanon}
{MakerNikon}
{MakerMinolta}
{MakerFuji}
{MakerOlympus}
{MakerPentax}