Дата создания с камеры

Я изо всех сил пытаюсь получить дату создания из изображения, выбранного в ролике камеры. Вот мой код:

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!") } ) 

}

В старой версии Xcode с Objective-C я сделал это, что отлично работает:

 - (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); } ];} 

Я был бы очень благодарен, если бы кто-то помог мне получить CreationDate из образа.

основанный на вашем коде и как я могу получить изображение, созданное датой даты или последним измененным датом времени с iOS Photos (например, скроллирование камеры)?

это работает для меня на XCode 6.1.1 для 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!") } )} 

Нашел решение сам:

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

здесь быстрый 3-й код для проверки даты создания

 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)") }) } 
  • «Неатомный» имеет смысл в объявленном свойстве «readonly» (включая свойство класса)?
  • Запись на BLE-ресивер в iOS Swift
  • Swift: UIPercentDrivenInteractiveTransition при отмене?
  • iOS8 Trailing Closures в Swift
  • Передвиньте экран вверх, когда клавиатура появится в зависимости от textView. стриж
  • UIPopOver из UIButton для iPhone
  • Принуждение UIImagePickerController для открытия квадратной камеры с Swift
  • Неверный файл AVAssetExport
  • Как реализовать автозаполнение для городов с MapKit?
  • Как правильно использовать селектор в swift 4
  • Как отображать SVG-изображение как UIImage с Swift
  • Давайте будем гением компьютера.