91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android圖片資源瘦身的方法是什么

發布時間:2022-01-12 14:48:27 來源:億速云 閱讀:107 作者:iii 欄目:云計算

這篇文章主要介紹“Android圖片資源瘦身的方法是什么”,在日常操作中,相信很多人在Android圖片資源瘦身的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Android圖片資源瘦身的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一.選擇壓縮工具

首先是選擇壓縮工具的問題,在這之前先看下系統是如何做的。android的aapt在編譯階段其實是會對png圖片進行壓縮的,用的則是libpng和zlib,這個可以用aapt的源碼佐證:

  • 用libpng對圖片進行預處理

  • 用zlib對預處理后的圖片進行壓縮生成新圖片

可以看到aapt對圖片的壓縮等級使用了最高等級9,期間系統也會做顏色表轉換,這樣可以減少很大一部分圖片的體積,但系統的壓縮方案是不是完美無缺呢?目前常用的無損壓縮大概有Pngrewrite、pngcrush、optipng、advancecom、pngout,參考了很多文章,得出的結果是pngout仍然是王者,畢竟是Ken神童(據說Doom and Quake的作者John都尊敬他,做游戲的肯定都知道John )寫的。另外由于pngout可以很好的支持命令行,方便放到編譯腳本中自動化,所以暫時選它好了。

二.實踐案例

壓縮工具選好了,第二步便是實驗了。拿手Q為例,直接對手Q中的所有png壓一遍,Pngout的速度確實一般,對4千張圖片全部處理一遍大概需要13分鐘,不過這個過程只需要在本地做一遍,所以可以忍受,但處理完的結果不理想,因為沒什么效果,減小量為十幾KB~~ 仔細分析得知這里面犯渾作怪的竟然是aapt,由于先調pngout再調aapt會導致壓縮效果覆蓋。那么可不可以關閉aapt呢? 查看aapt的參數,關于壓縮相關的只有下面這兩個參數:

其中crunch便是預處理資源了,但是沒有關閉crunch的參數。。。。有點技窮了對不對。只能去源碼中找靈感了,看aapt的源碼:

google把它隱藏了,沒有打印出來給用戶~打開這個參數,在手Q中資源打包腳本處分別加入--no-crunch參數,便可以把系統壓縮給屏蔽掉了,樣式如下:

至于為什么設置了這個參數就可以屏蔽呢,其實源碼調用過程如下:

第1步 (Main.cpp)

第2步 (Command.cpp)

第3步 (Resource.cpp)

終結: (Resource.cpp)

可是實驗還沒有結束,因為這樣屏蔽掉會出現奇葩的景象,得到的手Q畫面效果如下:

為什么呢?仔細分析發現九宮格圖片被壓出問題了,aapt在處理png圖片時會判斷是不是九宮格圖片,如果是則做特殊預處理:

do_9patch其實主要的是九宮格信息弄出來,寫入到info9Patch字段,并最終寫入nptc的chunk中:

到這里又回到第一步為什么我說Ken是神童了,因為Pngout可以選擇chunk進行壓縮,所以解決方案便是:對于九宮格圖片,我們單獨拎出來,先用aapt的aapt crunch進行預處理得到npTc字段,再用pngout在壓縮時調用"knptc"參數保護一下npTc塊,這樣便得到了正確的九宮格圖片,安裝包的效果圖也就正常了。

到此,關于“Android圖片資源瘦身的方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

华容县| 唐河县| 济南市| 苗栗市| 元江| 德钦县| 韶山市| 勐海县| 海林市| 蒙城县| 拉萨市| 米林县| 柳州市| 江川县| 绵竹市| 紫金县| 孙吴县| 阳朔县| 台北县| 武汉市| 屯留县| 洞口县| 鞍山市| 玉林市| 苏尼特右旗| 交口县| 兰坪| 岑溪市| 洛川县| 昌平区| 鄂州市| 营山县| 五常市| 贺兰县| 徐汇区| 开鲁县| 锡林郭勒盟| 松溪县| 七台河市| 怀宁县| 高雄市|