I have successfully added metadata to a jpg created within the app and saved it to the Camera Roll using the
writeImageToSavedPhotosAlbum: metadata: completionBlock:
method. However I would also like the option of emailing this jpg with the metadata (such as location, exit, etc.). I use this to email:
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
NSData *myData = UIImageJPEGRepresentation(emailImage, 0.8);
[picker addAttachmentData:myData mimeType:@"image/jpg" fileName:@"photo"];
However, this results in no metadata.
When the saved image is sent via Apple's photo app, metadata is included.
Is there a way to embed the metadata into NSData attachment? Any ideas?
UIImage doesn't hold any metadata. If you have the path for the image read data directly from it. If you get the image back from camera roll there's the
imagePickerController:didFinishPickingMediaWithInfo:
method from UIImagePickerDelegate which also contains the metadata inside the info dictionary.Also the mimeType should be "image/jpeg".
Edit: To add metadata to a
UIImage
you can use the ImageIO framework: You can create aCGImageDestination
object from a UIImage, add metadata to it usingCGImageDestinationSetProperties
and then get the raw data (which includes the compressed image and the metadata) from itHere is an example code to attach metadata to a NSMutableData object, which can be mailed.