久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

216次閱讀
沒有評論

共計 1430 個字符,預(yù)計需要花費 4 分鐘才能閱讀完成。

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

一. 選擇壓縮工具

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

用 libpng 對圖片進(jìn)行預(yù)處理

用 zlib 對預(yù)處理后的圖片進(jìn)行壓縮生成新圖片

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

二. 實踐案例

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

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

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

至于為什么設(shè)置了這個參數(shù)就可以屏蔽呢,其實源碼調(diào)用過程如下:

第 1 步 (Main.cpp)

第 2 步 (Command.cpp)

第 3 步 (Resource.cpp)

終結(jié):(Resource.cpp)

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

為什么呢?仔細(xì)分析發(fā)現(xiàn)九宮格圖片被壓出問題了,aapt 在處理 png 圖片時會判斷是不是九宮格圖片,如果是則做特殊預(yù)處理:

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

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

到此,關(guān)于“Android 圖片資源瘦身的方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計1430字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 天水市| 甘德县| 泾阳县| 同德县| 阿勒泰市| 宜丰县| 四子王旗| 山阴县| 加查县| 田阳县| 综艺| 海城市| 兴城市| 德清县| 余江县| 乐亭县| 嘉义县| 陇西县| 罗山县| 潜山县| 平昌县| 蕲春县| 林甸县| 安康市| 如皋市| 丰都县| 咸丰县| 霞浦县| 土默特左旗| 樟树市| 千阳县| 阿克| 刚察县| 富阳市| 商都县| 南平市| 克什克腾旗| 阜新市| 婺源县| 鲁山县| 博白县|