2

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)")
                })
            }
        }
    }
}
dennis605
  • 200
  • 3
  • 14

1 Answers1

0

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];

    }
Renish Dadhaniya
  • 10,642
  • 2
  • 31
  • 56