android - 如何在android上正确灰度位图以使文件更轻
问题描述
我试图充分利用压缩,我需要使图像灰度化以使文件更轻。我找到了一个使图像灰度化的函数:
fun toGrayscale(bmpOriginal: Bitmap): Bitmap {
val width = bmpOriginal.width
val height = bmpOriginal.height
val bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val c = Canvas(bmpGrayscale)
val paint = Paint()
val cm = ColorMatrix()
cm.setSaturation(0f)
val f = ColorMatrixColorFilter(cm)
paint.colorFilter = f
c.drawBitmap(bmpOriginal, 0f, 0f, paint)
return bmpGrayscale
}
然后我保存它
try {
FileOutputStream(filePathGrayScale).use { out ->
bmp.compress(Bitmap.CompressFormat.JPEG, 100, out)
}
} catch (e: IOException) {
e.printStackTrace()
}
但是图像尺寸增加了!
我到底做错了什么以及如何使事情正确?
解决方案
bmp.compress(Bitmap.CompressFormat.JPEG, 100, out)
您正在以 100 的压缩质量保存图像。这会最大化文件大小(并最小化质量损失)。
如果您想充分利用压缩,请在此处传递较低的值。没有理想值,因为它实际上取决于被压缩的图像和可容忍的伪影数量。这是文件大小和图像质量之间的权衡。
有关质量级别的更多信息,请参阅:
转换为 JPG 时选择什么质量?
还有一些例子1 , 2
推荐阅读
- sql - 在 SQL 中将 ROW 值转换为 Column 值
- oracle - 在 Oracle Forms 中抑制警告
- mongodb - 具有年龄范围的MongoDB聚合
- c# - 如何根据 wpf 中的键将静态字典值绑定到文本框
- c# - Visual Studio 2015 远程调试不兼容平台错误
- python - Matplotlib:如何增加刻度线之间的空间(或减少刻度线的数量)?
- android - 安卓:UI设计
- bash - Bash 脚本 - 将源脚本的输出传递给变量
- ios - Crashlytics 设备状态仅在 iOS 上的后台
- google-cloud-dataflow - Google Cloud Pub/Sub to BigQuery 模板主题订阅