Como converter um Bitmap grande (foto tirada com a câmera do telefone) em uma String Base64?
android
bitmap
base64
android-bitmap
Pankaj Singh
fonte
fonte
Respostas:
use o seguinte método para converter bitmap em matriz de bytes:
para codificar base64 a partir da matriz de bytes, use o seguinte método
fonte
Eu tenho solução rápida. Basta criar um arquivo
ImageUtil.java
Uso:
ou
fonte
O problema com a resposta de jeet é que você carrega todos os bytes da imagem em uma matriz de bytes, o que provavelmente trava o aplicativo em dispositivos low-end. Em vez disso, primeiro eu escrevia a imagem em um arquivo e a lia usando a classe Base64InputStream do Apache . Em seguida, você pode criar a string Base64 diretamente do InputStream desse arquivo. Isso parecerá assim:
Como você pode ver, a solução acima trabalha diretamente com fluxos, evitando a necessidade de carregar todos os bytes em uma variável, tornando a área de memória muito menor e com menor probabilidade de travar em dispositivos low-end. Ainda existe o problema de colocar a própria seqüência Base64 em uma variável String não é uma boa ideia, pois, novamente, isso pode causar erros OutOfMemory. Mas pelo menos reduzimos pela metade o consumo de memória, eliminando a matriz de bytes.
Se você quiser pular a etapa de gravação em um arquivo, precisará converter o OutputStream em um InputStream, o que não é tão simples de fazer (você deve usar o PipedInputStream, mas isso é um pouco mais complexo, pois os dois fluxos sempre devem estar em segmentos diferentes).
fonte
Tente isso, primeiro redimensione sua imagem para a largura e a altura necessárias, basta passar o bitmap original, a largura e a altura necessárias para o método a seguir e obter o bitmap em escala em troca:
Por exemplo: Bitmap scaledBitmap = getScaledBitmap (originalBitmap, 250, 350);
Agora basta passar seu bitmap escalado para o seguinte método e obter a sequência base64 em troca:
Por exemplo: String base64String = getBase64String (scaledBitmap);
Para decodificar a sequência base64 de volta à imagem de bitmap:
fonte
Todas essas respostas são ineficientes, pois decodificam desnecessariamente um bitmap e, em seguida, recomprima o bitmap. Quando você tira uma foto no Android, ela é armazenada como um JPEG no arquivo temporário especificado quando você segue os documentos do Android .
O que você deve fazer é converter diretamente esse arquivo em uma string Base64. Aqui está como fazer isso em cópia-colar fácil (em Kotlin). Observe que você deve fechar o base64FilterStream para realmente liberar seu buffer interno.
Como um bônus, sua qualidade de imagem deve ser ligeiramente melhorada, devido ao desvio da recompactação.
fonte
Agora que a maioria das pessoas usa o Kotlin em vez de Java, eis o código no Kotlin para converter um bitmap em uma string base64.
fonte
Use este código ..
fonte