从相机胶卷图像创建日期

时间:2014-10-20 09:52:02

标签: ios xcode swift alassetslibrary

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

    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版本中,我做到了这一点,效果很好:

- (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,我将非常感激。

3 个答案:

答案 0 :(得分:2)

基于您的代码和 How can I get image created date time or last modified date time from iOS Photos (like camera roll)?

这个适用于我的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 :(得分:1)

自己找到解决方案:

            var image_representation : ALAssetRepresentation = asset.defaultRepresentation()

            var iref : CGImage = image_representation.fullResolutionImage().takeUnretainedValue()

            var metaData : NSDictionary = image_representation.metadata()

答案 2 :(得分:1)

这里有swift 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)")
    })
}