Как преобразовать битмап в 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
Попробуйте это преобразовать bitmap в 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);
}