如何在安卓上正确灰度位图以使文件更轻



我正在尝试充分利用压缩,我需要使图像灰度以使文件更轻。 我找到了一个使图像灰度的函数:

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

最新更新