在app中创建的电子邮件jpg,包括元数据

时间:2011-09-15 14:21:55

标签: iphone email metadata photolibrary

我已成功将元数据添加到应用程序中创建的jpg,并使用

将其保存到相机胶卷
writeImageToSavedPhotosAlbum: metadata: completionBlock: 

方法。但是,我还想选择通过电子邮件向这个jpg发送元数据(例如位置,退出等)。我用它来发送电子邮件:

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
NSData *myData =  UIImageJPEGRepresentation(emailImage, 0.8);
[picker addAttachmentData:myData mimeType:@"image/jpg" fileName:@"photo"];

然而,这导致没有元数据 当通过Apple的照片应用程序发送保存的图像时,包含元数据 。 有没有办法将元数据嵌入NSData附件?有什么想法吗?

2 个答案:

答案 0 :(得分:7)

UIImage不包含任何元数据。如果您有图像的路径直接从它读取数据。如果从相机胶卷中取回图像,则可以使用UIImagePickerDelegate中的imagePickerController:didFinishPickingMediaWithInfo:方法,该方法还包含信息字典中的元数据。

mimeType也应该是“image / jpeg”。

修改 要向UIImage添加元数据,您可以使用ImageIO framework:您可以从UIImage创建CGImageDestination对象,使用CGImageDestinationSetProperties向其添加元数据,然后获取原始数据(包括压缩图像和元数据)

答案 1 :(得分:0)

这是一个将元数据附加到NSMutableData对象的示例代码,可以邮寄。

UIImage* yourImage = ... from somewhere ...
NSDictionary* info = ... in my case from didFinishPickingMediaWithInfo:

CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef) UIImageJPEGRepresentation(yourImage, 0.5 /* compression factor */), NULL);

NSMutableData* imageData = [NSMutableData data];

CGImageDestinationRef imageDest = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageData, kUTTypeJPEG, 1, NULL);
CGImageDestinationAddImageFromSource(imageDest, source, 0, (__bridge CFDictionaryRef)info[@"UIImagePickerControllerMediaMetadata"]);
CGImageDestinationFinalize(imageDest);

CFRelease(imageDest);
CFRelease(source);

// at this point, imageData will contain your image + metadata