Date Created From Camera

I am trying to get the creation date from the image selected in the camera roll. Here is my code:

func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info:NSDictionary!) { var tmpImg = info[UIImagePickerControllerOriginalImage] as UIImage var metaData: NSDictionary var exifData: NSDictionary let library = ALAssetsLibrary() var dataJpeg: NSData var url: NSURL = info.objectForKey(UIImagePickerControllerReferenceURL) as NSURL library.assetForURL(url, resultBlock: { (asset: ALAsset!) in if asset != nil { var image_representation : ALAssetRepresentation = asset.defaultRepresentation() var iref : CGImage = assetRep.fullResolutionImage().takeUnretainedValue() //How do I get DateTime from CGImage in Swift?? } }, failureBlock: { (error: NSError!) in NSLog("Error!") } ) 

}

In the old version of Xcode with Objective-C, I did this, which works great:

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *chosenImage = info[UIImagePickerControllerOriginalImage]; ////////////////////////// ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library assetForURL:[info objectForKey:UIImagePickerControllerReferenceURL] resultBlock:^(ALAsset *asset) { ALAssetRepresentation *image_representation = [asset defaultRepresentation]; // create a buffer to hold image data uint8_t *buffer = (Byte*)malloc(image_representation.size); NSUInteger length = [image_representation getBytes:buffer fromOffset: 0.0 length:image_representation.size error:nil]; if (length != 0) { // buffer -> NSData object; free buffer afterwards NSData *adata = [[NSData alloc] initWithBytesNoCopy:buffer length:image_representation.size freeWhenDone:YES]; // identify image type (jpeg, png, RAW file, ...) using UTI hint NSDictionary* sourceOptionsDict = [NSDictionary dictionaryWithObjectsAndKeys:(id)[image_representation UTI] ,kCGImageSourceTypeIdentifierHint,nil]; // create CGImageSource with NSData CGImageSourceRef sourceRef = CGImageSourceCreateWithData((__bridge CFDataRef) adata, (__bridge CFDictionaryRef) sourceOptionsDict); // get imagePropertiesDictionary CFDictionaryRef imagePropertiesDictionary; imagePropertiesDictionary = CGImageSourceCopyPropertiesAtIndex(sourceRef,0, NULL); // get exif data CFDictionaryRef exif = (CFDictionaryRef)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyExifDictionary); NSDictionary *exif_dict = (__bridge NSDictionary*)exif; NSString *creationdate=exif_dict[@"DateTimeOriginal"]; // clean up CFRelease(imagePropertiesDictionary); CFRelease(sourceRef); } else { NSLog(@"image_representation buffer length == 0"); } } failureBlock:^(NSError *error) { NSLog(@"couldn't get asset: %@", error); } ];} 

I would really appreciate if someone would help me get CreationDate from the image.

0
source share
4 answers

based on your code and How to get an image with a date or last modified date from iOS photos (for example, using the camera’s movie)?

this one works for me on Xcode 6.1.1 for Swift:

 func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info:NSDictionary!) { let library = ALAssetsLibrary() var url: NSURL = info.objectForKey(UIImagePickerControllerReferenceURL) as NSURL library.assetForURL(url, resultBlock: { (asset: ALAsset!) in if asset != nil { //print the creation date println(asset.valueForProperty(ALAssetPropertyDate)) } }, failureBlock: { (error: NSError!) in NSLog("Error!") } )} 
+1
source

Found a solution on my own:

  var image_representation : ALAssetRepresentation = asset.defaultRepresentation() var iref : CGImage = image_representation.fullResolutionImage().takeUnretainedValue() var metaData : NSDictionary = image_representation.metadata() 
0
source

here is a quick 3rd code for checking the creation date

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let library = ALAssetsLibrary() let url: NSURL = info[UIImagePickerControllerReferenceURL] as! NSURL library.asset(for: url as URL, resultBlock: { (asset: ALAsset?) in if asset != nil { //print the creation date print(asset!.value(forProperty: ALAssetPropertyDate)) } }, failureBlock: { (error: Error?) in NSLog("Error \(error)") }) } 
0
source

Since then, Apple has strongly condemned ALAssetsLibrary. A new method using PhotoKit is needed. I myself am looking for this solution.

0
source

Source: https://habr.com/ru/post/977771/


All Articles