Jak przekonwertować dużą mapę bitową (zdjęcie zrobione aparatem telefonu) na ciąg Base64?
android
bitmap
base64
android-bitmap
Pankaj Singh
źródło
źródło
Odpowiedzi:
użyj następującej metody, aby przekonwertować bitmapę na tablicę bajtów:
aby zakodować base64 z tablicy bajtów, użyj następującej metody
źródło
Mam szybkie rozwiązanie. Po prostu utwórz plik
ImageUtil.java
Stosowanie:
lub
źródło
Problem z odpowiedzią jeeta polega na tym, że ładujesz wszystkie bajty obrazu do tablicy bajtów, co prawdopodobnie spowoduje awarię aplikacji na urządzeniach z niższej półki. Zamiast tego najpierw zapisałbym obraz do pliku i odczytał go za pomocą klasy Base64InputStream Apache . Następnie możesz utworzyć ciąg Base64 bezpośrednio z InputStream tego pliku. Będzie to wyglądać tak:
Jak widać, powyższe rozwiązanie działa bezpośrednio ze strumieniami zamiast tego, unikając konieczności ładowania wszystkich bajtów do zmiennej, dzięki czemu zużycie pamięci jest znacznie mniejsze i mniej prawdopodobne jest awarie w urządzeniach o niższej jakości. Nadal istnieje problem polegający na tym, że umieszczenie samego ciągu Base64 w zmiennej String nie jest dobrym pomysłem, ponieważ znowu może powodować błędy OutOfMemory. Ale przynajmniej zmniejszyliśmy zużycie pamięci o połowę, eliminując tablicę bajtów.
Jeśli chcesz pominąć krok zapisu do pliku, musisz przekonwertować OutputStream na InputStream, co nie jest takie proste (musisz użyć PipedInputStream, ale jest to trochę bardziej złożone, ponieważ dwa strumienie muszą zawsze być w różnych wątkach).
źródło
Spróbuj tego, najpierw przeskaluj obraz do wymaganej szerokości i wysokości, po prostu przekaż oryginalną bitmapę, wymaganą szerokość i wymaganą wysokość do następującej metody i otrzymaj w zamian skalowaną bitmapę:
Na przykład: Bitmap scaledBitmap = getScaledBitmap (originalBitmap, 250, 350);
Teraz po prostu przekaż skalowaną bitmapę do następującej metody i otrzymaj w zamian ciąg base64:
Na przykład: String base64String = getBase64String (scaledBitmap);
Aby zdekodować ciąg base64 z powrotem do obrazu bitmapowego:
źródło
Wszystkie te odpowiedzi są nieefektywne, ponieważ niepotrzebnie dekodują do mapy bitowej, a następnie ponownie ją kompresują. Kiedy robisz zdjęcie w systemie Android, jest ono przechowywane jako jpeg w pliku tymczasowym, który określasz podczas śledzenia dokumentów systemu Android .
To, co powinieneś zrobić, to bezpośrednio przekonwertować ten plik na ciąg Base64. Oto jak to zrobić w łatwym kopiowaniu i wklejaniu (w Kotlinie). Zauważ, że musisz zamknąć base64FilterStream, aby naprawdę opróżnić jego wewnętrzny bufor.
Jako bonus, jakość obrazu powinna zostać nieznacznie poprawiona dzięki pominięciu ponownej kompresji.
źródło
Teraz, gdy większość ludzi używa Kotlin zamiast Javy, oto kod w Kotlinie do konwersji mapy bitowej na ciąg base64.
źródło
Użyj tego kodu ..
źródło