I would like to collect the date/time stored in an EXIF tag in a bunch of images.
I thought I could do so with the following procedure (some details and error checking omitted for sake of clarity): NSMutableArray * dates_and_times = [NSMutableArray arrayWithCapacity: [imagefiles count]]; CFDictionaryRef exif_dict; CFStringRef dateref = NULL; for ( NSString* filename in imagefiles ) { NSURL * imgurl = [NSURL fileURLWithPath: filename isDirectory: NO]; // escapes any chars that are not allowed in URLs (space, &, etc.) CGImageSourceRef image = CGImageSourceCreateWithURL( (__bridge CFURLRef) imgurl, NULL ); CFDictionaryRef fileProps = CGImageSourceCopyPropertiesAtIndex( image, 0, NULL ); bool success = CFDictionaryGetValueIfPresent( fileProps, kCGImagePropertyExifDictionary, (const void **) & exif_dict ); success = CFDictionaryGetValueIfPresent( exif_dict, kCGImagePropertyExifDateTimeDigitized, (const void **) & dateref ); NSString * date_str = [[NSString alloc] initWithString: (__bridge NSString * _Nonnull)( dateref ) ]; NSDate * iso_date = [isoDateFormatter_ dateFromString: date_str]; if ( iso_date ) [dates_and_times addObject: iso_date ]; CFRelease( fileProps ); } But, I get the impression, this code actually loads each and every image. On my Macbook, it takes 3m30s for 250k images (130GB). So, the big question is: can it be done faster? I know the EXIF tags are part of the image file, but I was hoping it might be possible to load only those EXIF dictionaries. Or are the CGImage functions above already clever enough to implement this idea? Best regards, Gab.
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com