Ребята, я сталкиваюсь с этой проблемой уже 2 дня подряд. Я хочу выбрать изображение из галереи и преобразовать его в метод Base64. Я пробовал Пикассо, но мое изображение очень большое. Не могли бы вы мне помочь. Я перепробовал все, но мне не хватает памяти при преобразовании в растровое изображение, а затем в base64.
BitmapDrawable drawable = (BitmapDrawable) ProfilePic.getDrawable();
yourSelectedIBitmapDrawable drawable = (BitmapDrawable) ProfilePic.getDrawable();
yourSelectedImage = drawable.getBitmap();mage = drawable.getBitmap();
Код, который преобразует это растровое изображение в Base64. Есть ли возможность пропустить растровое изображение и напрямую конвертировать в Base64
private 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;
}
Profile Pic - это имя Imageview.
РЕДАКТИРОВАТЬ : Таким образом, один из способов - использовать большую кучу, но Google говорит, что вы не должны использовать это без крайней необходимости. Другой, который работал для меня, является принятым ответом. Теперь я придумал собственное решение. Теоретически я использую Пикассо для загрузки изображения в вид изображения. Так что, если я могу извлечь изображение из ImageView. Не из URI или пути, но из Imageview. Таким образом, у вас есть изображение, которое уже уменьшено Пикассо. Picasso предоставляет обратный вызов для успеха или неудачи. Таким образом, в случае успеха вы можете получить доступ к кэш-памяти ImageView и извлечь из нее битовую карту.
Я скоро опубликую код в качестве ответа. Я попробовал это сделать, и даже изображение размером 35 Мб изначально можно преобразовать в растровое изображение без исключения «Недостаточно памяти».
Итак, вот мой ответ: https://stackoverflow.com/a/52125006/6022584