Как конвертировать растровое изображение в PNG, а затем в base64 в Android?

как следует из названия, я пытаюсь заставить пользователя моего приложения Android выбрать изображение с его устройства (готово), затем я хочу уменьшить изображение (готово), сжать/преобразовать изображение в png и отправить его в API в виде строки base64.

поэтому в настоящее время я изменяю размер изображения следующим образом:

options.inSampleSize = calculateInSampleSize(options, MAX_IMAGE_DIMENSION, MAX_IMAGE_DIMENSION);
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeFile(path, options);

затем у меня есть растровое изображение, которое я хочу преобразовать в PNG, а оттуда в base64. Я нашел пример кода для преобразования в PNG и хранения его на устройстве здесь.

try {
       FileOutputStream out = new FileOutputStream(filename);
       bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
       out.close();
} catch (Exception e) {
       e.printStackTrace();
}

проблема в том, что я не хочу, чтобы сохранить изображение. Я просто хочу сохранить его в памяти как PNG, а затем преобразовать его в строку base64.

кто-нибудь знает, как я могу преобразовать изображение в png и сохранить его в переменной таким образом, или даже лучше, немедленно преобразовать его в base64? Все советы приветствуются!

1 ответов


попробуйте преобразовать растровое изображение в png:

 bitmap.compress(Bitmap.CompressFormat.PNG, quality, outStream);

Регистрация метод документации.

Вы можете напрямую конвертировать растровое изображение в base64. Используйте это для кодирования и декодирования от и до Base64.

public static String encodeToBase64(Bitmap image)
{
    Bitmap immagex=image;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    immagex.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] b = baos.toByteArray();
    String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);

    Log.e("LOOK", imageEncoded);
    return imageEncoded;
}

public static Bitmap decodeBase64(String input) 
{
    byte[] decodedByte = Base64.decode(input, 0);
    return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length); 
}