来自相机胶卷图像的创建日期 [英] Creation Date from Camera Roll Image

查看:26
本文介绍了来自相机胶卷图像的创建日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在努力从相机胶卷中选择的图像中获取创建日期.这是我的代码:

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

这篇关于来自相机胶卷图像的创建日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆