You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bitmap.createScaledBitmap缩放后画质骤降,已设压缩质量100,如何优化?

优化Bitmap缩放画质的措施

针对480x480图片放大到512x512后画质下降的问题,可通过以下几点优化:

1. 启用缩放过滤

Bitmap.createScaledBitmap的最后一个参数设为true,开启双线性过滤,让放大后的像素过渡更平滑,减少锯齿感:

val resizedBitmap = Bitmap.createScaledBitmap(
    resized, 512, 512, true // 启用过滤
)

2. 优化解码配置

解码原图时指定高质量像素格式,避免解码阶段的画质损失:

val options = BitmapFactory.Options().apply {
    inPreferredConfig = Bitmap.Config.ARGB_8888 // 保留完整色彩通道
    inScaled = false // 禁用默认缩放,确保解码原始像素
}
val resized = BitmapFactory.decodeFile(file.absolutePath, options)

3. 使用Canvas+Paint实现更平滑的缩放

相比createScaledBitmap,用Canvas绘制并配置Paint的过滤参数,能获得更细腻的缩放效果:

val resizedBitmap = Bitmap.createBitmap(512, 512, Bitmap.Config.ARGB_8888)
Canvas(resizedBitmap).apply {
    val paint = Paint().apply {
        isFilterBitmap = true
        isDither = true
        interpolation = Paint.Interpolation.BILINEAR // API 29+可改用BICUBIC,画质更优
    }
    drawBitmap(resized, null, Rect(0, 0, 512, 512), paint)
}

4. 改用无损WEBP压缩

Bitmap.CompressFormat.WEBP即使质量设为100仍属于有损压缩,改用无损格式彻底避免压缩损失:

resizedBitmap.compress(Bitmap.CompressFormat.WEBP_LOSSLESS, 0, it)
// 注:WEBP_LOSSLESS的质量参数无意义,传0即可

整合后的完整函数

fun resizeImage(file: File) {
    val options = BitmapFactory.Options().apply {
        inPreferredConfig = Bitmap.Config.ARGB_8888
        inScaled = false
    }
    val originalBitmap = BitmapFactory.decodeFile(file.absolutePath, options)
  
    originalBitmap?.let { bitmap ->
        val resizedBitmap = Bitmap.createBitmap(512, 512, Bitmap.Config.ARGB_8888)
        Canvas(resizedBitmap).apply {
            val paint = Paint().apply {
                isFilterBitmap = true
                isDither = true
                interpolation = Paint.Interpolation.BILINEAR
            }
            drawBitmap(bitmap, null, Rect(0, 0, 512, 512), paint)
        }
        
        file.outputStream().use {
            resizedBitmap.compress(Bitmap.CompressFormat.WEBP_LOSSLESS, 0, it)
            resizedBitmap.recycle()
            bitmap.recycle() // 回收原图Bitmap,避免内存泄漏
        }
    }
}

内容的提问来源于stack exchange,提问作者HavanaSun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:01:00