mac OS开发中获取exif数据
Posted
技术标签:
【中文标题】mac OS开发中获取exif数据【英文标题】:Get exif data in mac OS development 【发布时间】:2013-08-16 04:23:34 【问题描述】:我是 Objective-C 的新手,我正在尝试在我的 Mac OS 应用程序中获取有关某些图像的 exif 数据。看起来我需要一个 C 库来获取 exif 数据,所以我四处搜索,找到了一些 C 库,但我正在为如何实现它们而苦苦挣扎。
1 我是否需要获取 C 库才能读取从 DSLR 相机拍摄的图像上的 exif 数据? (拍摄日期之类的东西)
我尝试了这个库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
我将这些文件添加到 xcode 中,我认为文件似乎已正确添加到我的库中。
我现在不确定如何使用这些 C 类。我尝试包含这样的文件
#include "exif-data.h"
#include "exif-loader.h"
这是对的吗?我应该换一种方式吗?
-
然后我真的对用法感到困惑。在http://libexif.sourceforge.net/api/ 的文档页面上,它说
使用 libexif 的应用程序通常会首先创建一个 ExifLoader 以将 EXIF 数据加载到内存中。从那里,它将将该数据提取为 ExifData 以开始操作它。每个 IFD 在该 ExifData 中由其自己的 ExifContent 表示,其中包含 ExifEntry 形式的所有标记数据。如果需要 MakerNote 数据,可以从 ExifData 中提取 ExifMnoteData 并使用 MakerNote 函数进行操作。
“创建 ExifLoader”的语法是什么?
对不起,菜鸟问题!任何帮助表示赞赏。
【问题讨论】:
我正在深入研究这篇文章,目前看来它可能会得到我需要的东西:***.com/questions/6083372/… 我会在验证后报告。 【参考方案1】:你可以使用苹果自己的API来获取图片Exif。
这是CGImageSource Reference 还有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
key =光圈值;值 = 4.643856
key =色彩空间;值 = 65535
key =自定义渲染;值 = 0
key =日期时间数字化;值 = 2013:06:13 08:35:07
key =日期时间原始;值 = 2013:06:13 08:35:07
key =Exif 版本;值 = ( 2、 2、 1 )
key =曝光偏差值;值 = 0
key =曝光模式;值 = 1
key =曝光程序;值 = 1
key =曝光时间;值 = 0.0125
键 =FNumber ;值 = 5
key =Flash ;值 = 9
key =焦距;值 = 17
key =焦平面分辨率单元;值 = 2
key =焦平面 X 分辨率;值 = 3849.211788896504
key =焦平面 Y 分辨率;值 = 3908.141962421712
key =ISO 速度等级;值 = ( 800 )
key =最大光圈值;值 = 4
key =测光模式;值 = 5
key =像素 X 尺寸;值 = 5181
key =像素 Y 尺寸;值 = 3454
key =场景捕捉类型;值 = 0
key =快门速度值;值 = 6.321928
key =主题距离;值 = 1.22
key =亚秒时间数字化;值 = 25
key =亚秒时间原始;值 = 25
键=白平衡;值 = 0
【讨论】:
CGImage 不支持某些元数据类型,例如 MP。它只是没有显示出来。【参考方案2】:这篇文章做到了:http://devmacosx.blogspot.com/2011/07/nsimage-exif-metadata.html。我现在可以读取我正在寻找的所有 exif 数据。
【讨论】:
不管结束码。也许我在这里错了。但是,难道不是我的回答通过示例向您指出了正确的信息。您最初接受的。 CGImageSource 参考和 CGimageProperties。以上是关于mac OS开发中获取exif数据的主要内容,如果未能解决你的问题,请参考以下文章
iPhone OS 图像/照片大小调整工具更改 EXIF 方向数据