文件压缩——内存压缩
二、文件压缩方式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-turboC语言编写的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欢迎留下您的宝贵建议】