中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

文昌市| 大冶市| 太湖县| 工布江达县| 扬州市| 来安县| 宽甸| 龙州县| 德清县| 涿鹿县| 独山县| 定远县| 柯坪县| 广丰县| 凉山| 太湖县| 景德镇市| 庆城县| 通州区| 青川县| 广宗县| 卢龙县| 林口县| 冷水江市| 汉阴县| 佛坪县| 板桥市| 高陵县| 沅陵县| 济源市| 柳河县| 元朗区| 陆河县| 四平市| 南川市| 尚志市| 申扎县| 利津县| 玉林市| 石狮市| 邻水|