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 } } }