如果您正好在处理图片资源压缩,并且使用了 Android Studio 自带的 Google 转换工具 Convert to WebP,可能已经受够了单张图片转换的耗时和批量转换时的不确定性。在这种情况下,不妨试试我的这个插件!
1.功能介绍
2.效果展示
上述结果展示了对项目中
drawable-xxhdpi 文件夹内大于 50KB 的 PNG 和 JPG 资源文件进行无损压缩后的效果:
- 成功转换&删除 24个资源文件
- 节省 4.9MB 大小
3.PNG、JPG、Webp介绍
-
PNG (Portable Network Graphics)
• 无损压缩:PNG 是一种无损压缩格式,适合需要高保真图像的场景,如图标和 UI 元素。
• 支持透明度:PNG 支持透明通道(Alpha 通道),适用于需要透明背景的图像。
• 文件较大:由于是无损压缩,PNG 文件通常比 JPG 文件大。
• 适用场景:多用于图标、矢量图、Logo 等需要保持图像质量和透明度的场景。 -
JPG (Joint Photographic Experts Group)
• 有损压缩:JPG 使用有损压缩技术,会在压缩过程中丢失一些图像细节,但文件大小较小。
• 不支持透明度:JPG 不支持透明背景,因此不适合 UI 元素或需要透明度的图像。
• 适用场景:适合存储照片等复杂场景的图像,特别是背景图片或其他色彩丰富的图像,能有效减少文件大小。 -
WEBP (Web Picture)
• 高效压缩:WEBP 支持有损和无损压缩,可以在较小的文件大小下保持较高的图像质量。
• 支持透明度:WEBP 支持透明通道,兼具 PNG 和 JPG 的优点。
• 加载性能:在 Android 上,WEBP 的加载性能优于 PNG 和 JPG,特别是对于大图片资源。
• 适用场景:广泛适用于多种场景,特别是高效、优质图像需求的应用。适合用于需要减少应用体积的项目中。
4.Webp
参考:developer.android.com/studio/writ…
4.1.无损压缩
Android Studio 自带的转换工具支持无损压缩,使用如下:
例如转换一个375kb的图片:
转换后 180kb,无损压缩大概节省了 195kb
4.2.有损压缩
同一张375kb的图片,有损质量0.75压缩后,7.6kb!
5.流程&使用&源码:
5.1. 添加 webp-imageio依赖
`imageio`是一个用于处理 WebP 图片格式的 Java 库。它基于 ImageIO 扩展了 Java 的标准图像处理功能,能够支持 WebP 图片的读取和写入操作。WebP 是一种具有较高压缩效率的图片格式,因此在需要优化存储空间或传输效率的场景中(如应用中加载大量图片)常常使用。
5.2 将源码拷贝到项目中,源码如下
在根目录注册Task build.gradle.kts
tasks.register<com.doctorbox_buildsrc.ConvertImageToWebpTask>("convertPngToWebp") {
quality = 0.35f // 设置转换质量
// 可选:自定义输入输出目录
sourceDir = rootProject.project("app").file("src/main/res")
outputDir = rootProject.project("app").file("src/main/res")
minSizeKB = 20 // 只转换大于 50KB 的图片
shouldDeleteOriginal = true // 是否删除原 png 文件
// 有损、无损压缩(默认无损)
compressionMode = com.doctorbox_buildsrc.CompressionMode.LOSSY
// 使用通配符的模式匹配
// whitelistPatterns = setOf(
// "bg_ai_*.png"
// )
//
// // 白名单配置(完整文件名匹配)
// whitelistFiles = setOf(
// "bg_big_group.png"
// )
}
5.3. 使用:在Terminal中执行 ./gradlew convertPngToWebp
6. Q&A
6.1 是否支持白名单
已支持,具体配置见👆🏻
- 具体的文件名
- 通配符
6.2 为什么使用有损压缩质量设置0.35、0.75差别不大?
WebP 转换工具已经对图像进行了优化进行质量减少,平衡了压缩率和图像质量。即使设定较低的质量值,图像算法可能会尽量减少丢失关键细节,以便不显著影响视觉效果。
6.3 TinyPng 2次压缩问题
经手动测试,TinyPng 压缩后的图片,再转webp,如果无损压缩的情况下目前看没有问题。
源码:github.com/paihuai00/D… 有问题请联系:307292568@qq.com