fun compressImage(imageFile: File, maxSize: Long, quality: Int): File? { try { // 1. 将图像文件解码为Bitmap对象 val options = BitmapFactory.Options() options.inJustDecodeBounds = false options.inPreferredConfig = Bitmap.Config.RGB_565 val bitmap = BitmapFactory.decodeFile(imageFile.absolutePath, options) // 2. 将Bitmap对象压缩为字节数组输出流 val byteArrayOutputStream = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.JPEG, quality, byteArrayOutputStream) var qt = quality // 3. 循环压缩,直到满足最大文件大小要求 while (byteArrayOutputStream.toByteArray().size > maxSize && qt > 5) { byteArrayOutputStream.reset() bitmap.compress(Bitmap.CompressFormat.JPEG, qt, byteArrayOutputStream) qt -= 5 // 每次降低5%的压缩质量 } // 4. 创建压缩后的文件并保存字节数组到文件中 val compressedFile = File.createTempFile("compressed_", ".jpg") val fileOutputStream = FileOutputStream(compressedFile) fileOutputStream.write(byteArrayOutputStream.toByteArray()) fileOutputStream.flush() fileOutputStream.close() return compressedFile } catch (e: IOException) { e.printStackTrace() } return null }
02-15
1422