Email jpg, созданный в приложении, включая метаданные - PullRequest
1 голос
/ 15 сентября 2011

Я успешно добавил метаданные в jpg, созданный в приложении, и сохранил его в Camera Roll, используя

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 ]

7 голосов
/ 15 сентября 2011

UIImage не содержит метаданных. Если у вас есть путь к изображению, считайте данные непосредственно с него. Если вы вернули изображение из камеры, есть метод imagePickerController:didFinishPickingMediaWithInfo: из UIImagePickerDelegate, который также содержит метаданные внутри информационного словаря.

Также mimeType должен быть «image / jpeg».

Edit: Чтобы добавить метаданные в UIImage, вы можете использовать ImageIO framework : вы можете создать CGImageDestination объект из UIImage, добавить к нему метаданные, используя CGImageDestinationSetProperties, а затем получить необработанные данные (включая сжатое изображение и метаданные) из него

0 голосов
/ 21 июля 2016

Вот пример кода для присоединения метаданных к объекту 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...