1. 浅谈为什么Android和iOS图片质量差距那么大?

首先来说,作为一个安卓狗,机器当然用的是安卓的手机。现在的安卓手机大多数都会以高清拍照,动不动就几千万柔光相机来吸引各种买家。买来后,拍照发现,哇塞——一张图片好几M呢,但是还是不如iOS的感觉,iOS的图片也就1M左右吧。为什么会有这么大的差距呢?这要从安卓的设计初衷来说起,当时谷歌开发Android的时候,考虑了大部分手机的配置并没有那么高,所以对图片处理是使用的Skia这个库。当然这个库的底层还是是用的jpeg对图片进行压缩处理。但是为了能够适配低端的手机(这里的低端是指以前的硬件配置不高的手机),所以Skia在进行图片处理并没有去使用压缩图像过程中基于图像数据计算哈弗曼表(关于图片压缩中的哈弗曼表,请自行查阅相关资料),可以参考[这里](http://www.cnblogs.com/MaxIE/p/3951294.html)。这里面详细解释为何Google没有使用高性能的压缩,简单来说就是考虑了当时的手机硬件,将一个压缩参数optimize_coding设置为了false,使得硬件较低的手机能够很好的处理图片。

2. NDK环境以及Cmake配置(篇幅有限这里不做过多的描述)

添加环境变量

电脑培训,计算机培训,平面设计培训,网页设计培训,美工培训,Web培训,Web前端开发培训

将配置的环境变量添加到系统环境变量中。把%NDK_HOME%;添加到Path中。

3. jpeg库的下载及编译.so文件

下载libjpeg库源码,git clone地址

git clone git://git.linaro.org/people/tomgall/libjpeg-turbo/libjpeg-turbo.git -b linaro-android

将clone下来的源码目录改为jni(即源目录libjpeg-turbo改为jni),通过ndk命令进行编译(需要配好ndk环境变量,命令行进入修改好的jni目录输入命令即可):

ndk-build APP_ABI=armeabi-v7a,armeabi

在当前目录下生成libs和obj文件夹

电脑培训,计算机培训,平面设计培训,网页设计培训,美工培训,Web培训,Web前端开发培训

4. 新建一个Android项目

新建一个Android项目,并勾选c++support

电脑培训,计算机培训,平面设计培训,网页设计培训,美工培训,Web培训,Web前端开发培训

如果环境配置好的话,AS会自动生成一个包含NDK的项目,里面实现了hello world。目录结构如下图:

电脑培训,计算机培训,平面设计培训,网页设计培训,美工培训,Web培训,Web前端开发培训

新建一个类,JpegUtils,声明native方法

网友评论