我已成功将元数据添加到应用程序中创建的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附件?有什么想法吗?
答案 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