本文介绍了来自相机胶卷图像的创建日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在努力从相机胶卷中选择的图像中获取创建日期.这是我的代码:
I'm struggling with getting the creation date from an 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!")
}
)
}
在带有 Objective-C 的旧 Xcode 版本中,我这样做了,效果很好:
In an older Xcode Version with Objective-C I did this which works fine:
- (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,我将不胜感激.
I'd be very grateful if someone could help me get the CreationDate out of the Image.
推荐答案
基于您的代码和如何从 iOS 照片(如相机胶卷)获取图像创建日期时间或上次修改日期时间?
这个在 XCode 6.1.1 for Swift 上对我有用:
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!")
}
)}
这篇关于来自相机胶卷图像的创建日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!