Is it possible to add own metadata in captured Images in Swift

允我心安 提交于 2019-12-21 22:01:28

问题


I'm very new to Swift and Ios programming. I like to, as mentioned above, insert my own metadata to captured images before i save them to album.

I'm trying to get this done with this code. The saved image does not contain my own metadata, but its generated metadata. Can anybody please tell me what I'm doing wrong?

Or maybe isn't it possible to add own new metadata table to captured images?

Thanks a lot for your help

@IBAction func btnPressed(sender: UIButton) {

    capturePicture()
}

func capturePicture(){

    stillImageOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
    session.addOutput(stillImageOutput)
    if let connection = self.stillImageOutput.connectionWithMediaType(AVMediaTypeVideo) {

        self.stillImageOutput.captureStillImageAsynchronouslyFromConnection(connection) {
            (imageDataSampleBuffer, error) -> Void in

            if error == nil {

                var asset = ALAssetsLibrary()
                let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer)

                // The Metadata of the Image
                var metadata:NSDictionary = CMCopyDictionaryOfAttachments(nil, imageDataSampleBuffer, CMAttachmentMode(kCMAttachmentMode_ShouldPropagate)).takeUnretainedValue()
                // My Metadata i want to add for testing purpose
                var meta : NSDictionary = ["Ersteller": "Dennis","Datum" : "25.04.14","Ort" : "Köln" ]

                asset.writeImageDataToSavedPhotosAlbum(imageData, metadata: meta as [NSObject : AnyObject], completionBlock: { (path:NSURL!, error:NSError!) -> Void in
                    println("\(path)")
                    println("\(error)")
                })
            }
        }
    }
}

回答1:


Just Convert Below code to Swift. Below code are written in Objective-C. You just need to create IPTC or TIFF dictionary. Add value with suitable IPTC/TIFF key and write dictionary data(Meta Data) on image.

  - (void) imagePickerController: (UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *)info
    {

        UIImage *image = info[UIImagePickerControllerOriginalImage];

        //Here We Get current system date and time and store as a description of photo
        NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"dd-MM-yyyy"];
        NSLog(@"Date Formatter : %@",[dateFormatter stringFromDate:[NSDate date]]);

        //hh:mm:ss
        NSDateFormatter *timeFormatter=[[NSDateFormatter alloc] init];
        [timeFormatter setDateFormat:@"hh:mm:ss"];
        NSLog(@"time Formatterr : %@",[timeFormatter stringFromDate:[NSDate date]]);

    //ADD IPTC Dictionary Data as a META DATA
        NSMutableDictionary *iptcDict = [NSMutableDictionary dictionary];
        [iptcDict setValue:[[DataEngine sharedInstance] getAlbumName] forKey:(NSString *)kCGImagePropertyIPTCObjectTypeReference]; //folder name
        [iptcDict setValue:@“Renish Dadhaniya - 101" forKey:(NSString *)kCGImagePropertyIPTCObjectAttributeReference]; //add Image ID -get using query from database

        [iptcDict setValue:[NSString stringWithFormat:@“Renish Sweet Memory "forKey:(NSString *)kCGImagePropertyIPTCObjectName]; //Add Image name
        [iptcDict setValue:[dateFormatter stringFromDate:[NSDate date]]forKey:(NSString *)kCGImagePropertyIPTCDateCreated]; //Add Image Date
        [iptcDict setValue:[timeFormatter stringFromDate:[NSDate date]]forKey:(NSString *)kCGImagePropertyIPTCTimeCreated]; //Add Image Time

        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        [dict setValue:iptcDict forKey:(NSString *)kCGImagePropertyIPTCDictionary];

        //Get Iamge Url
         __block NSURL *imageAssestURL = nil;

        [asSetLib writeImageToSavedPhotosAlbum:image.CGImage metadata:dict completionBlock:^(NSURL* assetURL, NSError* error) {

            if (error) {
                NSLog(@"Image could not be safed to the assets library: %@", error);
                imageAssestURL = nil;
            }
            else {
                NSLog( @"Image safed successfully to assetURL: %@", assetURL);
                imageAssestURL = assetURL;

                       }

        }];

        [picker dismissViewControllerAnimated:YES completion:nil];

    }


来源:https://stackoverflow.com/questions/29946240/is-it-possible-to-add-own-metadata-in-captured-images-in-swift

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!