60 lines
1.7 KiB
Kotlin
60 lines
1.7 KiB
Kotlin
package com.sw.platecabinet.utils
|
|
import android.content.Context
|
|
import android.graphics.Bitmap
|
|
import android.os.Environment
|
|
import java.io.File
|
|
import java.io.FileOutputStream
|
|
import java.io.IOException
|
|
import kotlin.io.use
|
|
|
|
object BitmapSaver {
|
|
// 保存到公共目录(需WRITE_EXTERNAL_STORAGE权限)
|
|
fun saveToPublicDirectory(
|
|
bitmap: Bitmap,
|
|
folderName: String = Environment.DIRECTORY_PICTURES,
|
|
fileName: String,
|
|
format: Bitmap.CompressFormat = Bitmap.CompressFormat.PNG,
|
|
quality: Int = 100
|
|
): File? {
|
|
val dir = Environment.getExternalStoragePublicDirectory(folderName)
|
|
if (!dir.exists()) dir.mkdirs()
|
|
|
|
return saveBitmap(bitmap, File(dir, fileName), format, quality)
|
|
}
|
|
|
|
// 保存到应用私有目录(无需权限)
|
|
fun saveToAppFilesDir(
|
|
bitmap: Bitmap,
|
|
context: Context,
|
|
fileName: String,
|
|
format: Bitmap.CompressFormat = Bitmap.CompressFormat.JPEG,
|
|
quality: Int = 100
|
|
): File? {
|
|
//val dir = context.getExternalFilesDir(null)
|
|
val dir = context.cacheDir
|
|
val cropFile = File(dir, "crop")
|
|
if (cropFile.exists().not()) {
|
|
cropFile.mkdirs()
|
|
}
|
|
return saveBitmap(bitmap, File(cropFile, fileName), format, quality)
|
|
}
|
|
|
|
private fun saveBitmap(
|
|
bitmap: Bitmap,
|
|
outputFile: File,
|
|
format: Bitmap.CompressFormat,
|
|
quality: Int
|
|
): File? {
|
|
return try {
|
|
FileOutputStream(outputFile).use { fos ->
|
|
bitmap.compress(format, quality, fos)
|
|
fos.flush()
|
|
}
|
|
outputFile
|
|
} catch (e: IOException) {
|
|
e.printStackTrace()
|
|
null
|
|
}
|
|
}
|
|
}
|