Skip to content

Latest commit

 

History

History
140 lines (119 loc) · 5.08 KB

图片压缩使用文档.md

File metadata and controls

140 lines (119 loc) · 5.08 KB

图片压缩使用文档

图片压缩使用文档

功能 使用 输出 主要实现类
打包时自动 png 转 webp、webp 图片压缩 打包时自动执行 projectDir/compressWebp-{variantName}.json CwebpCompressTask

一、如何接入

  1. 在项目的根目录 build.gradle 文件中配置插件的 classpath:
    1. dependencies {
          classpath("com.omooo:lavender:0.1.0")
      }
  2. 在 Application 工程的 build.gradle 文件引用该插件:
    1. plugins {
          id("com.omooo.lavender")
      }
  3. 该功能默认是关闭状态,如需使用需要在新增配置项:
    1. plugins {
          id("com.omooo.lavender")
      }
      compressWebpConfig {
          enable = true // 开启该功能,会在打 release 包时自动压缩、转化图片
      }
  4. 该任务还需要配置 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。

1. 排序规则

输出的报告文件,排序规则如下:

  1. 压缩列表和未压缩列表(compressed_list / uncompress_list),是以 AAR 可减少的图片大小倒序输出,即以 reduce_size 字段倒序输出。
  2. 具体的某个 AAR 下的 image_list,是以原图片文件大小倒序输出,即以 source_size 字段倒序输出。
2. 各个字段说明
{
    "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 工具压缩转化。