【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


目录
相关文章
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
540 4
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
1047 5
|
测试技术
软考软件评测师——可靠性测试测试方法
软件可靠性是指软件在规定条件和时间内完成预定功能的能力,受运行环境、软件规模、内部结构、开发方法及可靠性投入等因素影响。失效概率指软件运行中出现失效的可能性,可靠度为不发生失效的概率,平均无失效时间(MTTF)体现软件可靠程度。案例分析显示,嵌入式软件需满足高可靠性要求,如机载软件的可靠度需达99.99%以上,通过定量指标评估其是否达标。
|
算法 JavaScript Android开发
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
1059 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
609 31
|
监控 中间件 测试技术
『软件测试5』测开岗只要求会黑白盒测试?NO!还要学会性能测试!
该文章指出软件测试工程师不仅需要掌握黑盒和白盒测试,还应该了解性能测试的重要性及其实现方法,包括负载测试、压力测试等多种性能测试类型及其在保证软件质量中的作用。
『软件测试5』测开岗只要求会黑白盒测试?NO!还要学会性能测试!
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
705 1
|
数据采集 缓存 测试技术
性能测试中,除了迭代次数,还有哪些因素会影响测试结果?
性能测试中,除了迭代次数,还有哪些因素会影响测试结果?
596 2