图片压缩使用文档
功能 | 使用 | 输出 | 主要实现类 |
---|---|---|---|
打包时自动 png 转 webp、webp 图片压缩 | 打包时自动执行 | projectDir/compressWebp-{variantName}.json | CwebpCompressTask |
- 在项目的根目录 build.gradle 文件中配置插件的 classpath:
-
dependencies { classpath("com.omooo:lavender:0.1.0") }
-
- 在 Application 工程的 build.gradle 文件引用该插件:
-
plugins { id("com.omooo.lavender") }
-
- 该功能默认是关闭状态,如需使用需要在新增配置项:
-
plugins { id("com.omooo.lavender") } compressWebpConfig { enable = true // 开启该功能,会在打 release 包时自动压缩、转化图片 }
-
- 该任务还需要配置 cwebp 工具,请将项目中的 cwebp 目录拷贝到 projectDir/tools 下。 1.
二、全部参数说明
compressWebpConfig {
// 默认关闭;开启后,会在打 release 包时自动压缩、转化图片
enable = false
// 默认关闭;开启后,打 debug 包时也会自动压缩、转化图片
enableWhenDebug = false
// 默认开启;关闭后,webp 图片也会进行压缩
enableFilterWebp = true
// 白名单,默认配置的是启动图标;
whiteList = arrayOf("ic_launcher.png", "ic_launcher_round.png")
// 下面两个参数应该无需业务方关心,后续我们考虑将会删除 cwebpToolsDir 参数
// 是否只打印图片不做压缩,默认关闭;仅作为排查问题使用,输出 allImageList-{variantName}.json
onlyPrintImages = false
// cwebp 工具目录
cwebpToolsDir = ""
}
当我们开了自动压缩图片功能后,执行:
./gradlew clean assembleRelease
后,项目中的日志有类似以下输出:
> Task :app:compressReleaseWebp
*********************************************
********** -- CwebpCompressTask -- **********
***** -- projectDir/compressWebp.json -- ****
*********************************************
Total reduce size: 0kb,
Compressed image count: 23,
Spend time: 264ms.
详细的文件报告在项目的根目录下,命名为:compressWebp-{variant name}.json。
输出的报告文件,排序规则如下:
- 压缩列表和未压缩列表(compressed_list / uncompress_list),是以 AAR 可减少的图片大小倒序输出,即以 reduce_size 字段倒序输出。
- 具体的某个 AAR 下的 image_list,是以原图片文件大小倒序输出,即以 source_size 字段倒序输出。
{
"before_process": { // 处理前
"total_image_count": 3740, // 总计图片数量
"total_size": "66539kb" // 总计图片大小
},
"after_process": { // 处理后
"compressed_image_count": 2868, // 压缩的图片数量
"uncompress_image_count": 872, // 未压缩的图片数量
"total_reduce_size": "51406kb", // 总计减少了图片大小
"spend_time": "71275ms" // 总计耗时
},
"compressed_list": { // 压缩列表
"xxx-5.11.0-SNAPSHOT": { // AAR 名称
"image_count": 48, // 该 AAR 下压缩了图片数量
"reduce_size": 2326501, // 该 AAR 下减少的图片大小
"image_list": [ // 该 AAR 下压缩的图片列表
{
// 文件名
"file_name": "xxx_magic_default_bg.webp",
// 原文件大小,单位:字节
"source_size": 1967643,
// 压缩后大小,单位:字节
"after_compressed_size": 10618,
// 文件的绝对路径
"file_absolute_path": "/Users/xxx/.gradle/caches/transforms-3/a8ac1fbe3874eb8fa20db43c3f047631/transformed/xxx-5.11.0-SNAPSHOT/res/drawable-xhdpi-v4/xxx_magic_default_bg.webp"
},
// ...
]
}
},
"uncompress_list": { // 未压缩列表
"core-1.5.0": {
"image_count": 1,
"image_list": [
{
"file_name": "notify_panel_notification_icon_bg.png",
"source_size": 138,
"after_compressed_size": 150,
"file_absolute_path": "/Users/xxx/.gradle/caches/transforms-3/141a348e8ef2edfc8b0f92f53d3f107b/transformed/core-1.5.0/res/drawable-xhdpi-v4/notify_panel_notification_icon_bg.png"
}
]
}
}
}
获取所有的图片文件(不包含 .9.png 图片),然后使用 cwebp 工具压缩转化。