Ich verwende zwei APIs, um EXIF-Daten aus Bildern zu lesen, die ich "valueForProperty:NSImageEXIFData" und "CGImageSourceCopyPropertiesAtIndex" nennen werde. Beide liefern die gleichen EXIF-Daten, obwohl die zweite auch andere Daten (z.B. GPS, TIFF) liefert.
Beide liefern falsche Werte für "ApertureValue" und "MaxApertureValue" und den richtigen Wert für "FNumber". Das nachfolgende Beispielprogramm gibt alle Metadaten aus, die von jeder Methode zurückgegeben werden, und ruft auch ExifTool auf. Die Ausgabe wird am Ende zusammengefasst.
(Wenn ich weiß, welches Objektiv ich benutzt habe, hat ExifTool recht, wenn es MaxApertureValue als 2.8 angibt.)
Details: Xcode 4.02, OS X 10.6.7, 10.6 SDK
Hat jemand anderes diese Anomalie bemerkt?
#import "ExifTestAppDelegate.h"
@implementation ExifTestAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSString *path = @"/Users/marc/Pictures/iPadPhotos- overflow/Portfolio/MJR_20061221_0258.jpg";
NSData *data = [NSData dataWithContentsOfFile:path];
NSImage *img = [[[NSImage alloc] initWithData:data] autorelease];
NSImageRep *rep = [img bestRepresentationForRect:NSMakeRect(0, 0, 500, 500) context:nil hints:nil];
NSDictionary *exifDict = (NSDictionary *)[(id)rep valueForProperty:NSImageEXIFData];
NSLog(@"NSImageEXIFData: %@", exifDict);
CGImageSourceRef imgSource = CGImageSourceCreateWithData((CFDataRef)data, nil);
CFDictionaryRef dictRef = CGImageSourceCopyPropertiesAtIndex(imgSource, 0, nil);
NSLog(@"CGImageSourceCopyPropertiesAtIndex: %@", dictRef);
CFRelease(imgSource);
system([[NSString stringWithFormat:@"exiftool '%@'", path] UTF8String]);
}
@end
/*
2011-05-21 11:22:58.140 ExifTest[4510:903] NSImageEXIFData: {
ApertureValue = 6;
...
FNumber = 8;
...
MaxApertureValue = 3;
...
}
2011-05-21 11:22:58.154 ExifTest[4510:903] CGImageSourceCopyPropertiesAtIndex: {
...
"{Exif}" = {
ApertureValue = 6;
...
FNumber = 8;
...
MaxApertureValue = 3;
...
ExifTool Version Number : 8.51
...
F Number : 8.0
...
Aperture Value : 8.0
...
Max Aperture Value : 2.8
*/
Update: Es liegt nicht an mir. Hier sind die EXIF-Daten, wie sie von Apples Vorschau-App gemeldet werden: