2014-04-18 13 views
5

Ho un widget di immagini per il caricamento di foto in un'app iOS che sto eseguendo il porting su Android. I dati vengono inviati come POST HTTP nel formato multipart/form-data. Devo replicare questo in Android ma sto avendo alcuni problemi.Equivalente Android a UIImageJPEGRappresentazione?

Codice esistente iOS frammento:

if ([[dictionary objectForKey:key] isKindOfClass:[UIImage class]]) { 
         NSData *imageJPEG = UIImageJPEGRepresentation([dictionary objectForKey:key], 1); 
         NSString *filename = [NSString stringWithFormat:@"%@.jpg", key]; 
         [(ASIFormDataRequest *)request setData:imageJPEG withFileName:filename andContentType:@"image/jpeg" forKey:key]; 
        } 

Su Android Sto cercando:

Bitmap fullImage = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
fullImage.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
byte[] b = baos.toByteArray(); 
String encodedImage = Base64.encodeToString(b, Base64.DEFAULT); 

la stringa risultante è diversa per la stessa immagine su entrambe le piattaforme tuttavia, il risultato è che l'Android l'immagine non viene visualizzata sul lato server dopo il caricamento.

Qual è l'equivalente di Android/Java a UIImageJPEGRepresentation per convertire un'immagine in un array di byte contenente un'immagine con codifica jpeg?

+1

Non aspettatevi rappresentazioni JPEG riproducibili, c'è un po 'di variabilità anche con tassi di compressione identici. L'altra differenza che noto è che stai inviando i dati come byte non elaborati nel caso iOS, ma inviandolo Base 64 codificato nel caso Android. Stai impostando l'intestazione Content-Encoding in modo appropriato su Android? –

+0

Sto inviando un'intestazione Content-Type: image/jpeg, ma al momento non sto impostando Content-Transfer-Encoding. Il team che gestisce il servizio web su cui stiamo caricando ha confermato che sta ricevendo la stringa di immagini e la sta memorizzando nel database alla fine. – Shane

+1

Ma senza impostare il tipo di codifica, probabilmente non decodificano il 64 di base in un'immagine jpg valida. –

risposta

3

Assicurati di impostare l'intestazione HTTP Content-Encoding su base64 in modo che il server sappia decodificare correttamente la base 64 in un jpg valido.

+0

Ho provato sia "Content-Transfer-Encoding: base64" che "Content-Encoding: base64" ma nessuno dei due ha funzionato. Caricamento di file JPEG con successo ma il formato non viene riconosciuto. Aggiungo 'encodedImage' di @Shane da' request.append (encodedImage); 'dove' request' è di tipo 'OutputStreamWriter'. Tutti i suggerimenti sarebbero apprezzati – rockhammer