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提供的Bitmap
和BitmapFactory
类。compressBitmap
函数接受一个Bitmap
对象和一个最大允许的大小(以KB为单位),并返回一个压缩后的Bitmap
对象。函数会在保证图片不失真的情况下,不断减少图片质量,直到图片大小小于最大允许的大小为止。
使用实例:
val originalBitmap = BitmapFactory.decodeFile("/sdcard/id_card.jpg") val compressedBitmap = compressBitmap(originalBitmap, 500) // 压缩到500KB以下 // 显示或保存压缩后的图片...