2014-04-18 4 views
5

Ich habe ein Foto-Upload-Bild-Widget in einer iOS-App, die ich auf Android portiere. Die Daten werden als HTTP POST im Multipart/Form-Data-Format gesendet. Ich muss das in Android replizieren, habe aber einige Probleme.Android entspricht UIImageJPEGRepräsentation?

Bestehende iOS Code-Schnipsel:

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

Auf Android Ich versuche:

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); 

Der resultierende String unterscheidet sich für das gleiche Bild auf beiden Plattformen jedoch ist das Ergebnis, dass die Android Das Bild wird nach dem Hochladen auf der Serverseite nicht gerendert.

Was ist das Android/Java-Äquivalent zu UIImageJPEGRepräsentation zum Konvertieren eines Bildes in ein Byte-Array, das ein JPEG-kodiertes Bild enthält?

+1

Erwarten Sie nicht, dass JPEG-Darstellungen reproduzierbar sind, selbst bei identischen Komprimierungsraten besteht eine große Variabilität. Der andere Unterschied, den ich bemerke, ist, dass Sie die Daten als rohe Bytes im iOS-Fall senden, aber senden Sie Base 64 verschlüsselt im Android-Fall. Setzen Sie den Content-Encoding-Header auf Android passend? –

+0

Ich sende einen Content-Type: image/jpeg-Header, aber ich setze derzeit kein Content-Transfer-Encoding. Das Team, das den Web-Service ausführt, auf den wir hochladen, hat bestätigt, dass sie die Bildzeichenfolge empfangen und sie in der Datenbank an ihrem Ende speichern. – Shane

+1

Aber ohne den Kodierungstyp wird wahrscheinlich das Basis-64 nicht wieder in ein gültiges JPG-Bild decodiert. –

Antwort

3

Stellen Sie sicher, dass Sie den Content-Encoding-HTTP-Header auf base64 setzen, damit der Server die Basis 64 ordnungsgemäß in ein gültiges jpg dekodieren kann.

+0

Ich habe sowohl "Content-Transfer-Encoding: base64" als auch "Content-Encoding: base64" ausprobiert, aber beide haben nicht funktioniert. JPEG-Datei wird erfolgreich hochgeladen, aber das Format wird nicht erkannt. Ich füge @Shanes 'encodedImage' an 'request.append (encodedImage);' an, wobei 'request' vom Typ' OutputStreamWriter' ist. Irgendwelche Vorschläge würden geschätzt werden – rockhammer