http://i.cnblogs.com/EditPosts.aspx?opt=1
android里面對於圖片的處理一直是個比較煩人的問題,煩人之處在於一個不小心,就有可能造成OOM。
最近碰到一個關於圖片上傳的問題,圖片上傳我們肯定要保證2點,一點是圖片的大小盡可能的小,
但是圖片的清晰度又要有一定的保證,基於此我們有兩個方向,一個是將圖片縮小,第二個是將圖片的質量降低。
對於縮小圖片,我們的方法不少,可以裁剪,可以縮放;
而另一種降低圖片的方法就是降低質量,使用這個方法后圖片就會變得模糊,如果我們降低質量太多,會發現我們的圖片都變成了很大的像素點,有過圖像分析的都知道,我們的圖片是由一個個像素點表示的,降低質量是通過一定的算法來的,有些可以直接使用將一個“田”的四個像素,按照我們的約定用一個值來代替,這樣會將原來有區分的四個像素點變為一個沒有區分的像素點,當我們降低圖片的質量在肉眼不可分辨的階段的時候,其實我們是看不出來圖片的質量有什么直接的變化,但是一旦超過了我們肉眼能夠識別的區域,我們就會有很直觀的變化。
上面兩個方法也是現在網絡上流傳比較多的兩個方法,但是有些時候我們發現使用那兩個方法其實還是達不到我們的要求,在網上找了一些方法,我覺得還不錯,其中在我的一個項目中使用到了其中的一個方法。
1. 不使用jpg格式的圖片,使用其他格式的圖片,我看了看,發現了webp這個格式有很大的優點,
其一是這個格式的圖片在保持和jpg相同信息的大小的情況下,其大小比jpg小39%(網上人家說的,具體的大小你們可以看看權威文獻,我這里只是想表達大小減小了很多),看了一篇文章,說的QQ里面的表情就是使用的這個格式的圖片,不過這個圖片的解析比解析jpg慢大約10倍的時間(無論怎么慢可定也是不會很慢的,網上人家測試的結果我記的不是很清楚了100ms左右吧)。
在android 4.0之前官方的API里面是沒有相關的方法提供的,但是4.0之后,api里面提供了相關的方法。
請參考這里的文章,寫的很好:http://www.uisdc.com/image-format-webp-introduction
2. 使用so文件來壓縮jpg,看過一篇文章,人家講了微信里面為什么android版的圖片和ios版的圖片清晰度為什么差別那么多,人家的團隊摸索了很久,好像說是android和ios都是使用了同一個包來對圖片進行壓縮,但是里面里面有個參數在android里面默認的是false,但是ios好像對這個參數的處理比較好點,這樣ios表現的清晰度就比android更加清晰,找不到原文了,不知道這個是不是原文,還是附上一個連接地址:http://www.geekfan.net/11651/
第2中方法是我們項目中現在使用到的方法,會用到NDK編譯,不過里面已經提供了相關的so庫,如果不想編譯,直接拷出來用就好了,本來想直接改為公司包名的,但是有些頭文件就是沒找到。。。沒改成,自己C語言的基礎還是差了點,以后繼續學習。