1

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

4

2 回答 2

7

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

mimeType 也应该是“image/jpeg”。

编辑: 要将元数据添加到UIImage您可以使用ImageIO 框架CGImageDestination:您可以从 UIImage创建一个对象,使用它添加元数据CGImageDestinationSetProperties,然后从中获取原始数据(包括压缩图像和元数据)

于 2011-09-15T14:37:30.900 回答
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
于 2016-07-21T02:53:18.600 回答