1. 淺談為什么Android和iOS圖片質(zhì)量差距那么大?
首先來說,作為一個(gè)安卓狗,機(jī)器當(dāng)然用的是安卓的手機(jī)?,F(xiàn)在的安卓手機(jī)大多數(shù)都會(huì)以高清拍照,動(dòng)不動(dòng)就幾千萬柔光相機(jī)來吸引各種買家。買來后,拍照發(fā)現(xiàn),哇塞——一張圖片好幾M呢,但是還是不如iOS的感覺,iOS的圖片也就1M左右吧。為什么會(huì)有這么大的差距呢?這要從安卓的設(shè)計(jì)初衷來說起,當(dāng)時(shí)谷歌開發(fā)Android的時(shí)候,考慮了大部分手機(jī)的配置并沒有那么高,所以對(duì)圖片處理是使用的Skia這個(gè)庫。當(dāng)然這個(gè)庫的底層還是是用的jpeg對(duì)圖片進(jìn)行壓縮處理。但是為了能夠適配低端的手機(jī)(這里的低端是指以前的硬件配置不高的手機(jī)),所以Skia在進(jìn)行圖片處理并沒有去使用壓縮圖像過程中基于圖像數(shù)據(jù)計(jì)算哈弗曼表(關(guān)于圖片壓縮中的哈弗曼表,請(qǐng)自行查閱相關(guān)資料),可以參考[這里](http://www.cnblogs.com/MaxIE/p/3951294.html)。這里面詳細(xì)解釋為何Google沒有使用高性能的壓縮,簡單來說就是考慮了當(dāng)時(shí)的手機(jī)硬件,將一個(gè)壓縮參數(shù)optimize_coding設(shè)置為了false,使得硬件較低的手機(jī)能夠很好的處理圖片。
2. NDK環(huán)境以及Cmake配置(篇幅有限這里不做過多的描述)
添加環(huán)境變量
將配置的環(huán)境變量添加到系統(tǒng)環(huán)境變量中。把%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命令進(jìn)行編譯(需要配好ndk環(huán)境變量,命令行進(jìn)入修改好的jni目錄輸入命令即可):
ndk-build APP_ABI=armeabi-v7a,armeabi
在當(dāng)前目錄下生成libs和obj文件夾
4. 新建一個(gè)Android項(xiàng)目
新建一個(gè)Android項(xiàng)目,并勾選c++support。
如果環(huán)境配置好的話,AS會(huì)自動(dòng)生成一個(gè)包含NDK的項(xiàng)目,里面實(shí)現(xiàn)了hello world。目錄結(jié)構(gòu)如下圖:
新建一個(gè)類,JpegUtils,聲明native方法
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式