2015-05-25 5 views
5

У меня есть изображения, сохраненные в моем приложении Каталог документов в формате .jpg с данными EXIF. Моя проблема заключается в том, что всякий раз, когда я пытаюсь преобразовать файлы .jpg в NSData, которые будут загружены с использованием HTTP POST, загруженное изображение теряет все свои EXIF-данные.iOS - Загрузка изображения с EXIF ​​целым

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; 
NSString *imagePath = [documentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",imageName]]; 
NSData *jpegImageData = [NSData dataWithContentsOfFile:imagePath]; 

Как я могу загрузить мои .jpg файлы из каталога документов с их EXIF ​​неповрежденными?

+0

Как именно вы знаете, что (1) файл изображения имеет информацию EXIF, когда он находится в каталоге «Документы», и (2) файл потерял эту информацию после загрузки? – matt

+0

(1) Я обратился к папке «Документы» с помощью диспетчера файлов и скопировал изображение. Затем, используя EXIF-инструменты для просмотра изображения EXIF. (2) Загрузило загруженное изображение с сервера и использовало на нем инструмент EXIF, все данные EXIF ​​потеряны. – Gudmund

ответ

1

Сохранение метаданных EXIF ​​файла jpg. Я работал с решением:

- (void)uploadImage:(NSString *)imagePath { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
     // Repair upload data 
     UIImage *image = [UIImage imageNamed:imagePath]; 

     NSData *rawDataImage = UIImageJPEGRepresentation(image, 1.0f); 

     NSString *base64EncodedString = @""; 
     if ([rawDataImage respondsToSelector:@selector(base64EncodedStringWithOptions:)]) 
     { 
      base64EncodedString = [rawDataImage base64EncodedStringWithOptions:0]; 
     } 
     else 
     { 
      base64EncodedString = [rawDataImage base64Encoding]; 
     } 

     NSString *uploadBody = [NSString stringWithFormat:@"{\"imageData\": \"%@\"}", base64EncodedString]; 

     // Post uploadBody to server 
     NSString *serverUrl = @"Your_server"; 

     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:serverUrl]]; 

     [request addValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 

     NSString *msgLength = [NSString stringWithFormat:@"%lu", uploadBody.length]; 
     [request addValue:msgLength forHTTPHeaderField:@"Content-Length"]; 

     [request setHTTPMethod:@"POST"]; 
     [request setHTTPBody:[uploadBody dataUsingEncoding:NSUTF8StringEncoding]]; 

     [NSURLConnection connectionWithRequest:request delegate:<your_delegate OR nil>]; 
    }); 
} 

Надеюсь, это поможет вам.

+0

ОП спросил об информации EXIF. – Andrea

+0

@Andrea: Да, это решение отлично сохраняет ваши данные EXIF. Я сделал – phuongle

+0

@phuongle Спасибо за решение, я попытался опубликовать закодированную строку base64 на моем сервере, но загруженный jpg кажется поврежденным. Как отправить строку с кодировкой base64? – Gudmund