Wie konvertiere ich eine große Bitmap (mit der Kamera des Telefons aufgenommenes Foto) in eine Base64-Zeichenfolge?
android
bitmap
base64
android-bitmap
Pankaj Singh
quelle
quelle
Antworten:
Verwenden Sie die folgende Methode, um die Bitmap in ein Byte-Array zu konvertieren:
Verwenden Sie die folgende Methode, um base64 aus dem Byte-Array zu codieren
quelle
Ich habe eine schnelle Lösung. Erstellen Sie einfach eine Datei
ImageUtil.java
Verwendung:
oder
quelle
Das Problem mit der Antwort von jeet ist, dass Sie alle Bytes des Bildes in ein Byte-Array laden, wodurch die App auf Low-End-Geräten wahrscheinlich abstürzt. Stattdessen würde ich zuerst das Bild in eine Datei schreiben und es mit der Base64InputStream- Klasse von Apache lesen . Anschließend können Sie die Base64-Zeichenfolge direkt aus dem InputStream dieser Datei erstellen. Es wird so aussehen:
Wie Sie sehen können, funktioniert die obige Lösung stattdessen direkt mit Streams, sodass nicht alle Bytes in eine Variable geladen werden müssen, wodurch der Speicherbedarf erheblich verringert wird und die Wahrscheinlichkeit eines Absturzes bei Low-End-Geräten geringer ist. Es besteht immer noch das Problem, dass das Einfügen des Base64-Strings selbst in eine String-Variable keine gute Idee ist, da dies wiederum zu OutOfMemory-Fehlern führen kann. Aber zumindest haben wir den Speicherverbrauch halbiert, indem wir das Byte-Array eliminiert haben.
Wenn Sie den Schritt zum Schreiben in eine Datei überspringen möchten, müssen Sie den OutputStream in einen InputStream konvertieren, was nicht so einfach ist (Sie müssen PipedInputStream verwenden , dies ist jedoch etwas komplexer, da die beiden Streams immer erforderlich sind in verschiedenen Threads sein).
quelle
Versuchen Sie dies, skalieren Sie zuerst Ihr Bild auf die erforderliche Breite und Höhe, übergeben Sie einfach Ihre ursprüngliche Bitmap, die erforderliche Breite und die erforderliche Höhe an die folgende Methode und erhalten Sie im Gegenzug eine skalierte Bitmap:
Zum Beispiel: Bitmap scaledBitmap = getScaledBitmap (originalBitmap, 250, 350);
Übergeben Sie nun einfach Ihre skalierte Bitmap an die folgende Methode und erhalten Sie im Gegenzug den base64-String:
Zum Beispiel: String base64String = getBase64String (scaledBitmap);
So dekodieren Sie die base64-Zeichenfolge zurück in das Bitmap-Image:
quelle
Alle diese Antworten sind ineffizient, da sie unnötigerweise in eine Bitmap dekodiert und dann die Bitmap erneut komprimiert werden. Wenn Sie ein Foto unter Android aufnehmen, wird es als JPEG in der temporären Datei gespeichert, die Sie angeben, wenn Sie den Android-Dokumenten folgen .
Sie sollten diese Datei direkt in eine Base64-Zeichenfolge konvertieren. Hier erfahren Sie, wie Sie dies in einfachem Kopieren und Einfügen (in Kotlin) tun. Beachten Sie, dass Sie den base64FilterStream schließen müssen, um den internen Puffer wirklich zu leeren.
Als Bonus sollte Ihre Bildqualität leicht verbessert werden, da die erneute Komprimierung umgangen wird.
quelle
Da die meisten Benutzer Kotlin anstelle von Java verwenden, finden Sie hier den Code in Kotlin zum Konvertieren einer Bitmap in eine base64-Zeichenfolge.
quelle
Verwenden Sie diesen Code ..
quelle