1. 淺談為什么Android和iOS圖片質(zhì)量差距那么大?

首先來說,作為一個安卓狗,機器當然用的是安卓的手機。現(xiàn)在的安卓手機大多數(shù)都會以高清拍照,動不動就幾千萬柔光相機來吸引各種買家。買來后,拍照發(fā)現(xiàn),哇塞——一張圖片好幾M呢,但是還是不如iOS的感覺,iOS的圖片也就1M左右吧。為什么會有這么大的差距呢?這要從安卓的設(shè)計初衷來說起,當時谷歌開發(fā)Android的時候,考慮了大部分手機的配置并沒有那么高,所以對圖片處理是使用的Skia這個庫。當然這個庫的底層還是是用的jpeg對圖片進行壓縮處理。但是為了能夠適配低端的手機(這里的低端是指以前的硬件配置不高的手機),所以Skia在進行圖片處理并沒有去使用壓縮圖像過程中基于圖像數(shù)據(jù)計算哈弗曼表(關(guān)于圖片壓縮中的哈弗曼表,請自行查閱相關(guān)資料),可以參考[這里](http://www.cnblogs.com/MaxIE/p/3951294.html)。這里面詳細解釋為何Google沒有使用高性能的壓縮,簡單來說就是考慮了當時的手機硬件,將一個壓縮參數(shù)optimize_coding設(shè)置為了false,使得硬件較低的手機能夠很好的處理圖片。

2. NDK環(huán)境以及Cmake配置(篇幅有限這里不做過多的描述)

添加環(huán)境變量

電腦培訓,計算機培訓,平面設(shè)計培訓,網(wǎng)頁設(shè)計培訓,美工培訓,Web培訓,Web前端開發(fā)培訓

將配置的環(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命令進行編譯(需要配好ndk環(huán)境變量,命令行進入修改好的jni目錄輸入命令即可):

ndk-build APP_ABI=armeabi-v7a,armeabi

在當前目錄下生成libs和obj文件夾

電腦培訓,計算機培訓,平面設(shè)計培訓,網(wǎng)頁設(shè)計培訓,美工培訓,Web培訓,Web前端開發(fā)培訓

4. 新建一個Android項目

新建一個Android項目,并勾選c++support

電腦培訓,計算機培訓,平面設(shè)計培訓,網(wǎng)頁設(shè)計培訓,美工培訓,Web培訓,Web前端開發(fā)培訓

如果環(huán)境配置好的話,AS會自動生成一個包含NDK的項目,里面實現(xiàn)了hello world。目錄結(jié)構(gòu)如下圖:

電腦培訓,計算機培訓,平面設(shè)計培訓,網(wǎng)頁設(shè)計培訓,美工培訓,Web培訓,Web前端開發(fā)培訓

新建一個類,JpegUtils,聲明native方法

網(wǎng)友評論