当前位置 : 主页 > 网络编程 > 其它编程 >

Android性能优化(六)图片压缩

来源:互联网 收集:自由互联 发布时间:2023-07-02
一、压缩图片文件压缩——内存压缩二、文件压缩方式1.质量压缩2.尺寸压缩3.格式选择:JPEGWEBP(4.0以上)三、压缩原理frameworksbasecorej 一、压缩图片 文件压缩——内存压缩 二、文件压缩方
一、压缩图片文件压缩——内存压缩二、文件压缩方式1.质量压缩2.尺寸压缩3.格式选择:JPEGWEBP(4.0以上)三、压缩原理frameworksbasecorej 一、压缩图片

文件压缩——内存压缩

二、文件压缩方式

1.质量压缩  

2.尺寸压缩  

3.格式选择:JPEG/WEBP (4.0以上)

三、压缩原理

/frameworks/base/core/jni/android/graphics/Bitmap.cpp

Skia引擎

https://skia.org/index_zh

Google 研发、开源的C二维图形库 

Android

  阉割的skia版本对jpeg的处理基于libjpeg对png则是基于libpng。

  早期由于cpu吃紧。将libjpeg中的最优哈夫曼编码关闭了。直到7.0才打开

四、哈夫曼编码

一种字符编码方式常用于数据文件压缩。压缩率通常在20%~90%。

主要思想

  采取可变长编码方式对文件中出现次数多的字符采取比较短的编码对于出现次数少的字符采取比较长的编码可以有效地减小总的编码长度。

      颜色

      红

      黄

    蓝

    绿

    白

一张图片占比

    9

       1

    0

    0

    0 

     定长编码

     000

       001

    010

   011

   111

   变长哈夫曼

     0

        01

     110

    011

   111

五、LibJpeg-turbo 

C语言编写的JPEG编解码库。

1. NDK

https://developer.android.google.cn/ndk/index.html

Android Native Development Kit

一套允许使用原生代码语言C/C,实现部分应用的工具集。

 C/C与Java通过JNI交互

2. LibJpeg使用步骤

下载 -> 编译支持Android CPU架构的库 -> As集成 ->编码

3. 下载:

https://libjpeg-turbo.org/

4. 编译:

https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md

5. 步骤

1、生成configure(只需执行一次)

  如果生成x86架构的库需要NASM/YASM工具(armeabi不需要)

  sudo apt-get install libtool

  autoreconf -ivf

 

2、根据BUILDING.md 编写并执行脚本

  build.sh

8. AS集成

9. 编码 

  参考 build.sh中的 --prefix 配置的目录下的

  share/doc/libjpeg-turbo/example.c 中的write_JPEG_file函数 

10. 使用

  参考 build.sh中的 --prefix 配置的目录下的

  share/doc/libjpeg-turbo/example.c 中的write_JPEG_file函数 

11. Bitmap使用Libjepg步骤

  1、获得待压缩Bitmap

  2、获得Bitmap中像素数据(ARGB->BGR)

  3、Libjpeg压缩

  3.1、创建jpeg压缩对象

  3.2、指定存储文件

  3.3、设置压缩参数

  3.4、开始压缩

  3.5、循环写入每一行数据

  3.6、压缩完成

  3.7、释放jpeg对象

  

资源链接

https://download.csdn.net/download/Easyhood/12208476​​​​​​​

https://download.csdn.net/download/Easyhood/12208415​​​​​​​

【本文来源:韩国服务器 http://www.yidunidc.com欢迎留下您的宝贵建议】
上一篇:知识整理——异或
下一篇:没有了
网友评论