Преобразуем изображение в Base64 и обратно
Date and time: Jan. 18, 2016, 7:31 p.m. | Category: Android, Java
Часто бывают случаи, когда необходимо передать по сети какой-либо файл. Для передачи его удобно сначала преобразовать в строковое представление, например Base64. В данном посте я приведу пример кода на Java, который я использовал в одном из Android проектов для преобразования изображения в Base64 и обратно.
Следующий класс демонстрирует все необходимые преобразования. Допустим, в каком-нибудь классе у нас есть ImageView, в котором должно отображаться изображение переданное по сети в формате Base64. Причём пользователь может загрузить своё изображение и отправить обратно на сервер (данные методы не показаны).
По приходу строки с изображением от сервера, клиенту необходимо вызвать метод fromBase64 и передать в него полученную строку. В этом случае изображение будет декодировано и помещено в ImageVIew.
В случае, когда клиенту необходимо отправить изображение на сервер, он может вызвать метод toBase64 и получить изображение в виде строки для последующей передачи на сервер.
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.util.Base64;
import android.widget.ImageView;
import android.widget.TextView;
import java.io.ByteArrayOutputStream;
public class SomeClass {
public ImageView mSomeImageView;
public String toBase64() {
// Получаем изображение из ImageView
BitmapDrawable drawable = (BitmapDrawable) mSomeImageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();
// Записываем изображение в поток байтов.
// При этом изображение можно сжать и / или перекодировать в другой формат.
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
// Получаем изображение из потока в виде байтов
byte[] bytes = byteArrayOutputStream.toByteArray();
// Кодируем байты в строку Base64 и возвращаем
return Base64.encodeToString(bytes, Base64.DEFAULT);
}
public fromBase64(String image) {
// Декодируем строку Base64 в массив байтов
byte[] decodedString = Base64.decode(image, Base64.DEFAULT);
// Декодируем массив байтов в изображение
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
// Помещаем изображение в ImageView
mSomeImageView.setImageBitmap(decodedByte);
}
}
Разумеется, код содержит только минимально необходимые действия. Обработку возможных ошибок предлагается реализовать самостоятельно.
В следующий раз постараюсь разместить то же самое, только для файла.
comments powered by Disqus