Bagaimana cara mengonversi Bitmap besar (foto yang diambil dengan kamera ponsel) menjadi String Base64?
android
bitmap
base64
android-bitmap
Pankaj Singh
sumber
sumber
Jawaban:
gunakan metode berikut untuk mengubah bitmap menjadi array byte:
untuk menyandikan base64 dari larik byte menggunakan metode berikut
sumber
Saya punya solusi cepat. Buat saja file
ImageUtil.java
Pemakaian:
atau
sumber
Masalah dengan jawaban jeet adalah Anda memuat semua byte gambar ke dalam array byte, yang kemungkinan akan merusak aplikasi di perangkat kelas bawah. Sebagai gantinya, saya akan menulis gambar ke file dan membacanya menggunakan kelas Base64InputStream Apache . Kemudian Anda dapat membuat string Base64 langsung dari InputStream file itu. Ini akan terlihat seperti ini:
Seperti yang Anda lihat, solusi di atas bekerja langsung dengan aliran, menghindari kebutuhan untuk memuat semua byte ke dalam variabel, oleh karena itu membuat jejak memori jauh lebih rendah dan kecil kemungkinannya untuk mogok di perangkat kelas bawah. Masih ada masalah bahwa meletakkan string Base64 itu sendiri ke dalam variabel String bukanlah ide yang baik, karena, sekali lagi, ini dapat menyebabkan kesalahan OutOfMemory. Tetapi setidaknya kita telah memotong konsumsi memori hingga setengahnya dengan menghilangkan array byte.
Jika Anda ingin melewatkan langkah tulis-ke-file, Anda harus mengonversi OutputStream ke InputStream, yang tidak begitu mudah untuk dilakukan (Anda harus menggunakan PipedInputStream tetapi itu sedikit lebih rumit karena kedua aliran harus selalu berada di utas yang berbeda).
sumber
Coba ini, pertama ubah skala gambar Anda ke lebar dan tinggi yang diperlukan, cukup teruskan bitmap asli Anda, lebar yang diperlukan, dan tinggi yang diperlukan ke metode berikut dan dapatkan bitmap yang diskalakan sebagai gantinya:
Misalnya: Bitmap scaledBitmap = getScaledBitmap (originalBitmap, 250, 350);
Sekarang teruskan bitmap skala Anda ke metode berikut dan dapatkan string base64 sebagai gantinya:
Misalnya: String base64String = getBase64String (scaledBitmap);
Untuk mendekode string base64 kembali ke gambar bitmap:
sumber
Semua jawaban ini tidak efisien karena mereka mendekode ke bitmap dan kemudian mengompresi ulang bitmap tersebut. Saat Anda mengambil foto di Android, foto itu disimpan sebagai jpeg di file temp yang Anda tentukan saat mengikuti dokumen android .
Apa yang harus Anda lakukan adalah langsung mengonversi file itu ke string Base64. Berikut adalah cara melakukannya dengan copy-paste mudah (di Kotlin). Perhatikan, Anda harus menutup base64FilterStream untuk benar-benar membersihkan buffer internalnya.
Sebagai bonus, kualitas gambar Anda harus sedikit ditingkatkan, karena melewati proses kompresi ulang.
sumber
Sekarang kebanyakan orang menggunakan Kotlin dan bukan Java, berikut adalah kode di Kotlin untuk mengonversi bitmap menjadi string base64.
sumber
Gunakan kode ini ..
sumber