Saya sedang mengerjakan fungsi untuk mengunduh gambar dari server web, menampilkannya di layar, dan jika pengguna ingin menyimpan gambar, simpan di kartu SD di folder tertentu. Apakah ada cara mudah untuk mengambil bitmap dan hanya menyimpannya ke kartu SD di folder pilihan saya?
Masalah saya adalah saya bisa mengunduh gambar, menampilkannya di layar sebagai Bitmap. Satu-satunya cara saya dapat menemukan untuk menyimpan gambar ke folder tertentu adalah dengan menggunakan FileOutputStream, tetapi itu membutuhkan array byte. Saya tidak yakin bagaimana mengkonversi (jika ini adalah cara yang benar) dari Bitmap ke byte array, jadi saya dapat menggunakan FileOutputStream untuk menulis data.
Opsi lain yang saya miliki adalah menggunakan MediaStore:
MediaStore.Images.Media.insertImage(getContentResolver(), bm,
barcodeNumber + ".jpg Card Image", barcodeNumber + ".jpg Card Image");
Yang berfungsi baik untuk menyimpan ke kartu SD, tetapi tidak memungkinkan Anda untuk menyesuaikan folder.
mImage.setImageBitmap(_result.getBitmap());
dionTaskComplete()
callback saya . Saya sekarang harus mengizinkan pengguna untuk menyimpan file secara lokal jika mereka mau melalui menu konteks pers yang panjang. Saya harus dapat menggunakan solusi di bawah ini. Apa yang ingin saya ketahui, apakah Anda menemukan pendekatan yang lebih baik untuk ini?Jawaban:
sumber
90
, dalam contoh di atas tidak akan berpengaruh ketika menyimpan sebagai PNG, tetapi akan membuat perbedaan untuk JPEG. Dalam kasus JPEG, Anda dapat memilih angka apa saja antara 0 dan 100.Anda harus menggunakan
Bitmap.compress()
metode ini untuk menyimpan Bitmap sebagai file. Ini akan memampatkan (jika format yang digunakan memungkinkannya) gambar Anda dan mendorongnya ke OutputStream.Berikut adalah contoh instance Bitmap yang diperoleh
getImageBitmap(myurl)
yang dapat dikompresi sebagai JPEG dengan tingkat kompresi 85%:sumber
fOut.flush()
tidak mungkin untuk menghilangkannya?Bitmap.compress
menentukan kualitas.getImageBitmap(myurl)
akan melempar pengecualian tanpa izin di AndroidManifest.xml (setidaknya di os2.2):
sumber
Di dalam
onActivityResult
:sumber
Beberapa format, seperti PNG yang lossless, akan mengabaikan pengaturan kualitas.
sumber
Berikut adalah contoh kode untuk menyimpan bitmap ke file:
Sekarang panggil fungsi ini untuk menyimpan bitmap ke memori internal.
File newfile = savebitmap(bitmap)
;Saya harap ini akan membantu Anda. Kehidupan kode yang menyenangkan.
sumber
sumber
Mengapa tidak memanggil
Bitmap.compress
metode dengan 100 (yang kedengarannya seperti lossless)?sumber
Saya juga ingin menyimpan gambar. Tapi masalah saya (?) Adalah saya ingin menyimpannya dari bitmap yang saya gambar.
Saya membuatnya seperti ini:
sumber
Cara saya menemukan mengirim PNG dan transparansi.
sumber
Buat thumbnail video untuk video. Ini dapat mengembalikan nol jika video rusak atau format tidak didukung.
Untuk Menyimpan bitmap Anda di sdcard gunakan kode berikut
Simpan Gambar
Untuk Mendapatkan Jalur Penyimpanan Gambar
sumber
Anda ingin menyimpan Bitmap ke Direktori Pilihan Anda. Saya telah membuat pustaka ImageWorker yang memungkinkan pengguna memuat, menyimpan, dan mengonversi gambar bitmap / drawables / base64.
Min SDK - 14
Prasyarat
Menyimpan Bitmap / Drawable / Base64
Memuat Bitmap
Penerapan
Tambahkan Dependensi
Dalam Gradle Tingkat Proyek
Di Tingkat Aplikasi Gradle
Anda dapat membaca lebih lanjut di https://github.com/ihimanshurawat/ImageWorker/blob/master/README.md
sumber
Hei beri saja nama .bmp
Melakukan hal ini:
itu akan terdengar bahwa IM HANYA MENIPU DI SELURUHNYA, tetapi cobalah setelah itu akan disimpan dalam bmp foramt..Cheers
sumber
Pastikan direktori dibuat sebelum Anda menelepon
bitmap.compress
:sumber
Setelah Android 4.4 Kitkat, dan pada tahun 2017 pangsa Android 4.4 dan kurang adalah sekitar 20% dan menurun, tidak mungkin untuk menyimpan ke kartu SD menggunakan
File
kelas dangetExternalStorageDirectory()
metode. Metode ini mengembalikan memori internal perangkat Anda dan gambar disimpan terlihat oleh setiap aplikasi. Anda juga dapat menyimpan gambar hanya pribadi untuk aplikasi Anda dan dihapus ketika pengguna menghapus aplikasi Anda denganopenFileOutput()
metode.Dimulai dengan Android 6.0, Anda dapat memformat kartu SD Anda sebagai memori internal tetapi hanya pribadi untuk perangkat Anda. (Jika Anda memformat mobil SD sebagai memori internal, hanya perangkat Anda yang dapat mengakses atau melihat isinya) Anda dapat menyimpan ke kartu SD itu menggunakan jawaban lain tetapi jika Anda ingin menggunakan kartu SD yang dapat dilepas Anda harus membaca jawaban saya di bawah ini.
Anda harus menggunakan Kerangka Akses Penyimpanan untuk mendapatkan
onActivityResult
metode aktivitas folder ke uri untuk mendapatkan folder yang dipilih oleh pengguna, dan menambahkan izin tetap yang retreive untuk dapat mengakses folder setelah pengguna memulai ulang perangkat.Sekarang, simpan simpan folder ke preferensi bersama untuk tidak meminta pengguna memilih folder setiap kali Anda ingin menyimpan gambar.
Anda harus menggunakan
DocumentFile
kelas untuk menyimpan gambar Anda, bukanFile
atauParcelFileDescriptor
, untuk info lebih lanjut Anda dapat memeriksa utas ini untuk menyimpan gambar ke kartu SD dengancompress(CompressFormat.JPEG, 100, out);
metode danDocumentFile
kelas.sumber
pastikan Anda telah menambahkan Izin di bawah ini
dan di AndroidManifest di bawah
maka cukup panggil saveBitmapFile (passYourBitmapHere)
dimana
dan metode lainnya
dan
sumber
error handling for PIE devices..
dan saya kira rekursi dalamgetOutputMediaFile
dapat menjadi loop tak terbatas jika penyelesaiannya gagal.Simpan Bitmap ke Galeri Anda Tanpa Kompres.
sumber
// | == | Buat File PNG dari Bitmap:
// | == | Dapatkan Bimap dari File:
sumber