• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Getting NSDate from EXIF of a image
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Getting NSDate from EXIF of a image


  • Subject: Re: Getting NSDate from EXIF of a image
  • From: Nathan Vander Wilt <email@hidden>
  • Date: Tue, 3 Mar 2009 21:50:59 -0800


On Mar 2, 2009, at 8:48 PM, Jushin wrote:

I found that in order to convert NSString format of date to NSDate, we
need timezone.
But, EXIF doesn't support timezone unless GPS tags exist.

Yes, this is an unfortunate fact. Depending on what you need the date for, you may need to let the user choose what timezone the camera is in, and adjust the timestamp by the right amount before using the date in GMT/UTC as it should be.



So, here is what I have come up with:

NSDictionary *metadata = (NSDictionary *)
CGImageSourceCopyPropertiesAtIndex(source, 0, NULL);
NSMutableDictionary *muMetadata = [[metadata mutableCopy] autorelease];
[metadata release];


NSMutableDictionary *EXIFDictionary = [[[muMetadata
objectForKey:(NSString *)kCGImagePropertyExifDictionary]
										mutableCopy] autorelease];

Maybe you are using these later in your code, but you don't need mutable copies of these things to get the date.



NSString *EXIFDate = [[EXIFDictionary objectForKey:(NSString *)kCGImagePropertyExifDateTimeDigitized] retain];

I'm not sure why you are retaining this here. You do not need to retain this key to use it like you do below.




NSArray *listItems = [EXIFDate componentsSeparatedByString:@":"];

NSString *newFormatedDate = [NSString stringWithFormat:@"%@-%@-%@:%@: %@ %d",
[listItems objectAtIndex:0], [listItems objectAtIndex:1],
[listItems objectAtIndex:2],
[listItems objectAtIndex:3], [listItems objectAtIndex:4],
(([[NSTimeZone systemTimeZone] secondsFromGMT]/60)/60)];


NSDate *aDate = [[NSDate alloc] initWithString:newFormatedDate];

I still think these are not clever way. If you have better idea,
please share it with me :)

Why not use NSDateFormatter instead? Here's a function similar to one we use, simplified a bit further and using the Digitized timestamp you have in your code:


NSDate* PhotoDateFromEXIF(CFDictionaryRef exifProperties) {
NSString* dateTime = (NSString*)CFDictionaryGetValue(exifProperties, kCGImagePropertyExifDateTimeDigitized);
NSDate* originalDate = nil;
if (dateTime) {
NSDateFormatter* exifFormat = [[[NSDateFormatter alloc] init] autorelease];
[exifFormat setDateFormat:@"yyyy:MM:dd HH:mm:ss"];
originalDate = [exifFormat dateFromString:dateTime];
}
return originalDate;
}


hope this helps,
-natevw


On Mon, Mar 2, 2009 at 10:00 PM, Jushin <email@hidden> wrote:
I need to get time and date from EXIF of a image.
Following is the code snippet I used:

NSDictionary *metadata = (NSDictionary *)
CGImageSourceCopyPropertiesAtIndex(source, 0, NULL);
NSMutableDictionary *muMetadata = [[metadata mutableCopy] autorelease];
[metadata release];


NSMutableDictionary *EXIFDictionary = [[[muMetadata
objectForKey:(NSString *)kCGImagePropertyExifDictionary]
mutableCopy ] autorelease];


NSString *EXIFDate = [[EXIFDictionary objectForKey:(NSString
*)kCGImagePropertyExifDateTimeDigitized] retain];
NSLog(EXIFDate);

NSDate *aDate = [[NSDate alloc] initWithString: EXIFDate];


Here are my questions:

1. the last line, NSDate *aDate returns null.
I think it is because the format of EXIFDate string that was created
right above isn't correct.
When I did NSLog(EXIFDate), I get followings:
2008:11:06 19:12:51

According to the NSDate documentation, string format of time should be:
2008-11-06 19:12:51


2. the returned date string (EXIFData) doesn't have timezone information.
Is it possible to get timezone info as well from the EXIF information?


3. Well... eventually what I want to do is, I want to create "unix
time" format of date from image EXIF using timeIntervalSince1970.
Is there any other better way to get this?

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


References: 
 >Getting NSDate from EXIF of a image (From: Jushin <email@hidden>)
 >Re: Getting NSDate from EXIF of a image (From: Jushin <email@hidden>)

  • Prev by Date: Re: reloading IKImageBrowserView in an IBAction
  • Next by Date: Re: binding to number of selected rows in a table
  • Previous by thread: Re: Getting NSDate from EXIF of a image
  • Next by thread: Latent objects remain associated in NSTokenField after they are deleted/removed?
  • Index(es):
    • Date
    • Thread