2015-05-25 16 views
5

Ho immagini salvate nella mia applicazione Cartella documenti in formato .jpg con dati EXIF. Il mio problema è che ogni volta che provo a convertire i file .jpg in NSData da caricare usando HTTP POST, l'immagine caricata perde tutti i suoi dati EXIF.iOS - Caricamento immagine con EXIF ​​intatto

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

Come posso caricare i miei file .jpg dalla directory Documenti con i loro EXIF ​​intatti?

+0

Come sai esattamente che (1) il file immagine ha le informazioni EXIF ​​quando si trova nella directory Documenti e (2) il file ha perso tali informazioni dopo il caricamento? – matt

+0

(1) Ho avuto accesso alla directory dei documenti utilizzando un file manager e ho copiato l'immagine. Quindi utilizzando gli strumenti EXIF ​​online per visualizzare l'immagine EXIF. (2) Scaricata nuovamente l'immagine caricata dal server e utilizzato lo strumento EXIF ​​su di esso, tutti i dati EXIF ​​sono andati persi. – Gudmund

risposta

1

Per mantenere i metadati EXIF ​​del file jpg. Ho lavorato con la soluzione:

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

Spero che questo aiuto.

+0

L'OP ha chiesto informazioni EXIF. – Andrea

+0

@Andrea: Sì, questa soluzione mantiene perfettamente i tuoi dati EXIF. Ho fatto – phuongle

+0

@phuongle Grazie per la soluzione, ho provato a pubblicare la stringa codificata base64 sul mio server ma il jpg caricato sembra essere corrotto. Come posso pubblicare una stringa codificata in base 64? – Gudmund