Sorry if there's dupe emails. I think an important question here is, what exactly are you trying to do? Do you really expect to process these images repeatedly? 3.5m for a quarter million pics isn't terrible when one already possesses a working solution. If you have a specific task in mind, it would be helpful to know what level of performance would be acceptable.
On Sun, Aug 14, 2022 at 8:51 PM Gary L. Wade via Cocoa-dev < cocoa-dev@lists.apple.com> wrote: > I noticed you release the fileProps but didn’t release the image, but I > don’t know if that’s one of those details you left out for clarity. Also, > depending on some factors like mutability, while the initWithString call > with a CFStringRef might essentially be a no-op, you can just do the > typecast on the dateref and pass it directly into dateFromString. > > One thing I’d suggest is to do the work for each image asynchronously on a > background queue and have that block (essentially all of your for-loop > code) report its completion by some asynchronous way like posting a > notification on the original queue along with the result you care about, > the parsed date associated with the particular file. Let the original > queue handle how to store each parsed date; it would probably be best to > use a dictionary where the key was the filename and value is the date. To > prevent memory pressure, allocate your background queue so that it’s > concurrent and autorelease frequency is set to be workItem. If you want to > be sure to know when everything’s done, you could use a DispatchGroup to > track those and you could choose to pass back NSNull or nil for the parsed > result if the date could not be parsed. > > Of course, this will depend on if your file system is non-network-based > and whether it’s SSD vs HD as well as other physical system factors. > -- > Gary > > > On Aug 14, 2022, at 2:22 PM, Gabriel Zachmann via Cocoa-dev < > cocoa-dev@lists.apple.com> wrote: > > > > 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. > > > > _______________________________________________ > > 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/allyn.bauer%40gmail.com > > This email sent to allyn.ba...@gmail.com > _______________________________________________ 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