【Android 安装包优化】WebP 图片格式性能测试 ( 测试 WebP 图片解码速度 | 测试 WebP 图片编码速度 )

简介: 【Android 安装包优化】WebP 图片格式性能测试 ( 测试 WebP 图片解码速度 | 测试 WebP 图片编码速度 )

文章目录

一、测试 WebP 图片解码速度

二、测试 WebP 图片编码速度

三、参考资料



测试结果 : WebP 格式图片 , 解码快 , 编码慢 , 占用空间小 ;


在解码速度上 , WebP 格式要优于 png 格式 ;

在编码速度上 , png 格式优于 WebP 格式 ;





一、测试 WebP 图片解码速度


使用 【Android 安装包优化】WebP 图片格式 ( WebP 图片格式简介 | 使用 Android Studio 转换 WebP 图片格式 ) 二、使用 Android Studio 转换 WebP 图片格式 博客中的转换前后的图片 ;



这两张图片的像素值都是 2701 x 2702 像素 ;


icon_png.png 图片 , 大小 2.24MB ;

icon_webp.webp 图片, 大小 127.73 KB ;


解码速度测试方法 : 使用 BitmapFactory 加载这两张图片 , 查看耗时毫秒数 ;


import android.graphics.BitmapFactory
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
    val TAG = "MainActivity"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 测试 WebP 解码速度
        decodeWebP()
    }
    fun decodeWebP(){
        var pngStart = System.currentTimeMillis()
        BitmapFactory.decodeResource(resources, R.mipmap.icon_png)
        Log.e(TAG, "解码 png 格式图片时间 : ${System.currentTimeMillis() - pngStart} ")
        var webPStart = System.currentTimeMillis()
        BitmapFactory.decodeResource(resources, R.mipmap.icon_webp)
        Log.e(TAG, "解码 WebP 格式图片时间 : ${System.currentTimeMillis() - webPStart} ")
    }
}


执行结果 : 解码 WebP 图片比 png 图片耗时要少 , 因此其在解码时 , 解码速度性能没有损失 , 反而加强了 ;


2021-04-24 19:57:19.994 2248-2248/kim.hsl.webp E/MainActivity: 解码 png 格式图片时间 : 285 
2021-04-24 19:57:20.204 2248-2248/kim.hsl.webp E/MainActivity: 解码 WebP 格式图片时间 : 210

image.png






二、测试 WebP 图片编码速度


测试编码 WebP 格式图片 , 与编码 png 格式图片耗时 :


import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import java.io.FileOutputStream
class MainActivity : AppCompatActivity() {
    val TAG = "MainActivity"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 测试 WebP 解码速度
        decodeWebP()
        // 测试 WebP 编码速度
        encodeWebP()
    }
    fun encodeWebP(){
        // 读取一张本地图片
        var bitmap = BitmapFactory.decodeResource(resources, R.mipmap.icon_png)
        var pngStart = System.currentTimeMillis()
        var fos = FileOutputStream("${cacheDir}/icon_png.png")
        bitmap.compress(Bitmap.CompressFormat.PNG, 75, fos)
        fos.close()
        Log.e(TAG, "编码 png 格式图片时间 : ${System.currentTimeMillis() - pngStart} ms , " +
                "输出文件 : ${cacheDir}/icon_png.png")
        var webPStart = System.currentTimeMillis()
        fos = FileOutputStream("${cacheDir}/icon_webp.webp")
        bitmap.compress(Bitmap.CompressFormat.WEBP, 75, fos)
        fos.close()
        Log.e(TAG, "编码 WebP 格式图片时间 : ${System.currentTimeMillis() - webPStart} ms , " +
                "输出文件 : ${cacheDir}/icon_webp.webp")
    }
    fun decodeWebP(){
        var pngStart = System.currentTimeMillis()
        BitmapFactory.decodeResource(resources, R.mipmap.icon_png)
        Log.e(TAG, "解码 png 格式图片时间 : ${System.currentTimeMillis() - pngStart} ")
        var webPStart = System.currentTimeMillis()
        BitmapFactory.decodeResource(resources, R.mipmap.icon_webp)
        Log.e(TAG, "解码 WebP 格式图片时间 : ${System.currentTimeMillis() - webPStart} ")
    }
}



测试结果 : 编码速度上 , 编码 WebP 耗时更多 , 性能低于编码 png 格式图片 ;


2021-04-24 20:25:36.125 4483-4483/kim.hsl.webp E/MainActivity: 解码 png 格式图片时间 : 279 
2021-04-24 20:25:36.331 4483-4483/kim.hsl.webp E/MainActivity: 解码 WebP 格式图片时间 : 205 
2021-04-24 20:25:39.016 4483-4483/kim.hsl.webp E/MainActivity: 编码 png 格式图片时间 : 2416 ms , 输出文件 : /data/user/0/kim.hsl.webp/cache/icon_png.png
2021-04-24 20:25:42.113 4483-4483/kim.hsl.webp E/MainActivity: 编码 WebP 格式图片时间 : 3097 ms , 输出文件 : /data/user/0/kim.hsl.webp/cache/icon_webp.webp


image.png




查看生成的两张图片大小 : icon_png.png 图片 2350413 23504132350413 字节 , icon_webp.webp 图片 177410 177410177410 字节 ;


C:\Users\octop>adb shell
walleye:/ $
2|walleye:/ $ su
walleye:/ # cd /data/user/0/kim.hsl.webp/cache/
walleye:/data/user/0/kim.hsl.webp/cache # ls -la
total 2496
drwxrws--x 2 u0_a394 u0_a394_cache    4096 2021-04-24 20:25 .
drwx------ 4 u0_a394 u0_a394          4096 2021-04-24 19:56 ..
-rw------- 1 u0_a394 u0_a394_cache 2350413 2021-04-24 20:25 icon_png.png
-rw------- 1 u0_a394 u0_a394_cache  177410 2021-04-24 20:25 icon_webp.webp
walleye:/data/user/0/kim.hsl.webp/cache #

image.png






三、参考资料


参考文档 :


创建 WebP 图片 : https://developer.android.google.cn/studio/write/convert-webp

Android 中支持的媒体格式 : https://developer.android.google.cn/guide/topics/media/media-formats

isparta 工具官网 : http://isparta.github.io/

isparta 工具 GitHub 地址 : https://github.com/iSparta/iSparta

博客资源 :


iSparta 工具 : https://download.csdn.net/download/han1202012/17496041

Google libwebp 库 : https://download.csdn.net/download/han1202012/17498155

博客源码 :


GitHub 地址 : https://github.com/han1202012/Webp

CSDN 下载地址 : https://download.csdn.net/download/han1202012/17574192


目录
相关文章
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
526 11
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
如何让AI更“聪明”?VLM模型的优化策略与测试方法全解析​
本文系统解析视觉语言模型(VLM)的核心机制、推理优化、评测方法与挑战。涵盖多模态对齐、KV Cache优化、性能测试及主流基准,助你全面掌握VLM技术前沿。建议点赞收藏,深入学习。
2069 8
|
缓存 JavaScript 中间件
如何测试中间件优化后的 Pinia 状态管理?
如何测试中间件优化后的 Pinia 状态管理?
505 163
|
定位技术 开发者
游戏开发者如何使用独享静态代理IP进行测试与优化
随着互联网技术的发展,使用代理IP的人数逐渐增加,特别是在业务需求中需要使用静态代理IP的情况越来越多。本文探讨了独享静态代理IP是否适用于游戏行业,分析了其优势如稳定性、不共享同一IP地址及地理位置选择等,同时也指出了需要注意的问题,包括可能的延迟、游戏兼容性和网络速度等。总体而言,选择合适的代理服务并正确配置,可以有效提升游戏体验。
275 2
|
12月前
|
JSON 测试技术 API
优化你的 REST Assured 测试:设置默认主机与端口、GET 请求与断言
REST Assured 是一个强大的 Java 库,用于简化 RESTful API 测试。本文详解了其核心功能:设置默认主机和端口以减少代码重复、发起 GET 请求并验证响应结果,以及通过断言确保接口行为符合预期。同时推荐 Apipost 工具,助力开发者提升 API 测试效率,实现更高效的接口管理与团队协作。掌握这些技巧,可显著优化测试流程与代码质量。
|
数据可视化 JavaScript 前端开发
利用Postman和Apipost进行API测试的实践与优化-动态参数
在API测试中,Postman和Apipost是常用的工具。Postman内置变量功能有限,面对复杂场景时需编写JavaScript脚本,增加了维护成本。而Apipost提供丰富的内置变量、可视化动态值配置和低代码操作,支持生成真实随机数据,如邮箱、手机号等,显著提升测试效率和灵活性。对于复杂测试场景,Apipost是更好的选择,能有效降低开发与维护成本,提高测试工作的便捷性和可维护性。
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
419 3
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
574 1
|
Java 测试技术 API
Android测试工具 UIAutomator入门与介绍(上)
  UI Automator 测试工具定义以及用途
Android测试工具 UIAutomator入门与介绍(上)
|
Java Shell 测试技术
Android测试工具 UIAutomator入门与介绍(下)
  UI Automator 测试工具定义以及用途