2015-05-25 21 views
5

Mam obrazy zapisane w moim katalogu dokumentów aplikacji w formacie .jpg z danymi EXIF. Mój problem polega na tym, że za każdym razem, gdy próbuję konwertować pliki .jpg na NSData w celu przesłania za pomocą HTTP POST, przesłany obraz traci wszystkie swoje dane EXIF.iOS - przesyłanie obrazu z nienaruszonym EXIF ​​

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

Jak mogę przesłać swoje pliki .jpg Z katalogu dokumentów z ich EXIF ​​nienaruszone?

+0

Jak dokładnie wiesz, że (1) plik obrazu zawiera informacje EXIF, gdy znajduje się w katalogu dokumentów i (2) plik utracił te informacje po przesłaniu? – matt

+0

(1) Uzyskałem dostęp do katalogu dokumentów przy użyciu menedżera plików i skopiowałem obraz. Następnie za pomocą narzędzi EXIF ​​online, aby wyświetlić EXIF ​​obrazu. (2) Ponownie pobrano załadowany obraz z serwera i użyłem narzędzia EXIF, wszystkie dane EXIF ​​zostaną utracone. – Gudmund

Odpowiedz

1

Aby zachować metadane EXIF ​​pliku jpg. Pracowałem z rozwiązaniem:

- (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>]; 
    }); 
} 

Mam nadzieję, że ci to pomoże.

+0

Program OP zapytał o informacje EXIF. – Andrea

+0

@Andrea: Tak, to rozwiązanie doskonale utrzymuje dane EXIF. Zrobiłem – phuongle

+0

@phuongle Dzięki za rozwiązanie, próbowałem opublikować zakodowany kod base64 na mój serwer, ale przesłane jpg wydaje się być uszkodzone. Jak opublikować ciąg kodowany base64? – Gudmund