Блог
  • Начало
  • Обо мне
  • Обратная связь

Преобразуем изображение в Base64 и обратно

Дата и время: 18 января 2016 г. 19:31 | Категория: 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
Select language:
  • Русский
  • English

  • Программирование

    Python C++ JavaScript

    Веб-разработка

    Django ASP.NET

    Мобильная разработка

    Windows Phone Android

    Разработка игр

    Unity3d Blender

    Артем Устимов © 2014