一、压缩图片

文件压缩——内存压缩

二、文件压缩方式

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​​​​​​​

更多相关文章

  1. MTK android CTS测试
  2. android 日常迭代与维护总结一
  3. 【Android】 使用okhttp实现注册登录功能(与服务器端)
  4. Python String 的replace()与List的remove()
  5. android fastjson使用方法 fastjson教程
  6. android studio导入源码(来自github上下载的压缩包)
  7. android 获取网络数据,回传到本地用TextView显示乱码问题解决方法
  8. android jni的JNINativeMethod
  9. 【Android(安卓)Developers Training】 11. 支持不同语言

随机推荐

  1. 360安全中心详解免费Android软件扣走话费
  2. Android CTS 总结
  3. fir.im Weekly - iOS / Android(安卓)动
  4. Android 的cpu 硬盘 内存 网络设置 系统
  5. How to discover memory usage of my app
  6. android calendar的使用
  7. 史上最易懂的Android(安卓)jni开发资料--
  8. android一对多通信
  9. [Android(安卓)UI] shape和selector的结
  10. Android启动时启动Activity 的定义的位置