Android压缩身份证不失真的代码

import android.graphics.Bitmap
import android.graphics.BitmapFactory
import java.io.ByteArrayOutputStream

fun compressBitmap(bitmap: Bitmap, maxSize: Int): Bitmap {
    var quality = 100
    var stream = ByteArrayOutputStream()
    bitmap.compress(Bitmap.CompressFormat.JPEG, quality, stream)
    while (stream.toByteArray().size / 1024 > maxSize) {
        quality -= 5
        stream = ByteArrayOutputStream()
        bitmap.compress(Bitmap.CompressFormat.JPEG, quality, stream)
    }
    val byteArray = stream.toByteArray()
    return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
}

  此示例中,我们使用了Android提供的BitmapBitmapFactory类。compressBitmap函数接受一个Bitmap对象和一个最大允许的大小(以KB为单位),并返回一个压缩后的Bitmap对象。函数会在保证图片不失真的情况下,不断减少图片质量,直到图片大小小于最大允许的大小为止。

使用实例:

val originalBitmap = BitmapFactory.decodeFile("/sdcard/id_card.jpg")
val compressedBitmap = compressBitmap(originalBitmap, 500) // 压缩到500KB以下
// 显示或保存压缩后的图片...

  

posted @ 2023-04-03 15:08  施行  阅读(18)  评论(0编辑  收藏  举报