2015-04-26 2 views
1

Я делаю приложение, где люди могут брать и загружать фотографии. В настоящее время у меня есть объект Bitmap, который представляет фотографию, и я бы хотел опубликовать его на сервере.Как получить необработанную строку изображения из растрового изображения в андроиде?

К сожалению, сервер ожидает необработанный текст jpg (как то, что вы увидите, если вы набрали cat /path/to/jpg на linux).

Как я могу преобразовать Bitmap в String такого рода?

+1

Я действительно не думаю, что вы хотите 'String' или«текст "(поскольку JPEG - это двоичные данные, а преобразование его в' String' приведет к повреждению файла). Может быть, это всего лишь проблема языка ... Во всяком случае, я думаю, что вы хотите использовать raw 'byte'. Либо как 'byte []', либо через 'Input/OutputStream'. Однако, если вы хотите опубликовать (как в HTTP 'POST'), кодирование байтов в кодировке Base64 может иметь смысл. Трудно сказать. У вас уже есть два ответа. Для получения более точных ответов, уточните вопрос с более подробной информацией (например: Как вы разговариваете с сервером? Что такое протокол?). :-) – haraldK

ответ

3

Я бы предположил, что ваш сервер ожидает строку с кодировкой изображения Base64, а не только строку из cat /path/to/jpg.

Чтобы получить строку Base64, вы можете использовать:

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); // '100' is quality 
byte[] byteArray = out.toByteArray(); 
String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT); 
1

Предполагая, что вы растрового изображения ссылается bitmapImage -

Bitmap bitmapImage = //your code for getting Bitmap 

Теперь создайте ByteOutputStream

ByteArrayOutputStream byteOutptuStream = new ByteArrayOutputStream(); 
bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, byteOutptuStream); 
byte[] byteArray = byteOutptuStream.toByteArray(); 

Тогда кодировать изображение с использованием кодировки Base64 -

String imageAsString = Base64.encodeToString(byteArray, Base64.DEFAULT); 

Update: Если вы хотите, чтобы пропустить Base64 кодировку, то вы можете использовать либо кода фрагмент -

String imageAsString2 = new String(byteArray, "UTF-8"); 
String imageAsString3 = new String(byteArray); 
String imageAsString4 = new byteArray.toString(); 
+0

есть накладные расходы на кодировку Base64, хотя - как бы я сделал это для строки необработанного изображения? – johncorser

Смежные вопросы