1

我是 Objective-C 的新手,我正在尝试在我的 Mac OS 应用程序中获取某些图像的 exif 数据。看起来我需要一个 C 库来获取 exif 数据,所以我四处搜索,找到了一些 C 库,但我正在努力解决如何实现它们。

1 我是否需要获取 C 库才能读取从数码单反相机拍摄的图像上的 exif 数据?(拍摄日期之类的东西)

  1. 我尝试了这个库http://libexif.sourceforge.net/并在网站上四处寻找并从这里下载:http ://www.hmug.org/pub/MacOS_X/BSD/Libraries/Graphics/libexif/ ,其中转到此链接:http ://www.hmug.org/pub/MacOS_X/BSD/Libraries/Graphics/libexif/libexif-0.6.21-1-osx8.tar.gz

  2. 我将这些文件放入 xcode 中,我认为文件似乎已正确添加到我的库中。在此处输入图像描述

  3. 我现在不确定如何使用这些 C 类。我尝试包括这样的文件

    #include "exif-data.h"

    #include "exif-loader.h"

这是正确的吗?我应该以不同的方式来做吗?

  1. 然后我真的对用法感到困惑。在这里的文档页面http://libexif.sourceforge.net/api/它说

使用 libexif 的应用程序通常会首先创建一个 ExifLoader 以将 EXIF 数据加载到内存中。从那里,它将将该数据提取为 ExifData 以开始操作它。每个 IFD 在该 ExifData 中由其自己的 ExifContent 表示,其中包含 ExifEntry 形式的所有标记数据。如果需要 MakerNote 数据,可以从 ExifData 中提取 ExifMnoteData 并使用 MakerNote 函数进行操作。

“创建 ExifLoader”的语法是什么?

对不起菜鸟问题!任何帮助表示赞赏。

4

2 回答 2

8

您可以使用 Apple 自己的 API 来获取图像 Exif。

这是 CGImageSource 参考CGimageProperties

她是一个简单的例子:

 NSURL *imageFileURL = [NSURL fileURLWithPath:@"/Users/USERNAME/Documents/tasting_menu_004.jpg"];
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageFileURL, NULL);
NSDictionary *treeDict;
NSMutableString *exifData;


NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache,
                         nil];


CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, ( CFDictionaryRef)options);
CFRelease(imageSource);
if (imageProperties) {
    treeDict = [NSDictionary dictionaryWithDictionary:(NSDictionary*)(imageProperties)];
    id exifTree = [treeDict objectForKey:@"{Exif}"];



    exifData = [NSMutableString stringWithString:@""];



    for (NSString *key in [[exifTree allKeys] sortedArrayUsingSelector:@selector(compare:)])
    {


        NSString* locKey = [[NSBundle bundleWithIdentifier:@"com.apple.ImageIO.framework"] localizedStringForKey:key value:key table: @"CGImageSource"];

        id  value = [exifTree  valueForKey:key]  ;


                   [exifData appendFormat:@"key =%@ ; Value = %@ \n", locKey,value];




    }
 NSLog(@" exifData %@", exifData);

日志 -->exifData

键=光圈值;值 = 4.643856

键=色彩空间;值 = 65535

键=自定义渲染;值 = 0

键=日期时间数字化;值 = 2013:06:13 08:35:07

键=日期时间原始;值 = 2013:06:13 08:35:07

键 =Exif 版本;值 = ( 2, 2, 1 )

键=曝光偏差值;值 = 0

键=曝光模式;值 = 1

键=曝光程序;值 = 1

键=曝光时间;值 = 0.0125

键 =FNumber ; 值 = 5

键=闪光;值 = 9

键=焦距;值 = 17

键=焦平面分辨率单元;值 = 2

键=焦平面X分辨率;值 = 3849.211788896504

键=焦平面Y分辨率;值 = 3908.141962421712

键 =ISO 速度等级;价值 = ( 800 )

键=最大光圈值;值 = 4

键=测光模式;值 = 5

键=像素 X 尺寸;值 = 5181

键=像素Y尺寸;值 = 3454

key =场景捕捉类型;值 = 0

键=快门速度值;值 = 6.321928

键=主体距离;值 = 1.22

键=亚秒时间数字化;值 = 25

key =亚秒时间原始;值 = 25

键=白平衡;值 = 0

于 2013-08-18T16:51:48.677 回答
0

这篇文章做到了:http ://devmacosx.blogspot.com/2011/07/nsimage-exif-metadata.html 。我现在可以读取我正在寻找的所有 exif 数据。

于 2013-08-16T14:41:46.800 回答