前陣子歪哥參與的項目有這樣一個功能,就是在手機上拍一張照片傳到服務(wù)端,看起來很簡單,但沒有經(jīng)驗的我還是發(fā)現(xiàn)了一些小問題,最關(guān)鍵的就是相機默認拍出來的圖片太大了,有2~3M左右。
平時拍照沒注意過這些,但涉及到開發(fā)就不行了,除了接口調(diào)用慢之類的問題外,還有一點,出于種種考慮,服務(wù)端沒有使用文件存儲,而是將圖片做base64編碼,然后存在數(shù)據(jù)庫里。一個2~3M的圖片base64下來有幾百萬個字符,雖然用longtext還是能存下的,但查詢?nèi)庋劭梢姷穆?br />于是考慮在Android端先做一下圖片壓縮,畢竟在本需求里甚至大多數(shù)需求里不會對圖片質(zhì)量有那么高的要求。
Luban
圖片壓縮是很成熟的技術(shù)了,這次歪哥選用了人氣很高的Luban工具,先看一下基本的使用。
首先引入依賴
implementation 'top.zibin:Luban:1.1.8'
然后是最基本的使用
Luban.with(getContext()) .load(file) //原始圖片 .setTargetDir(getContext().getExternalFilesDir(null).getPath()) .setCompressListener(new OnCompressListener() { @Override public void onStart() // 壓縮開始前的回調(diào) } @Override public void onSuccess(File file) { // 壓縮成功后的回調(diào),file為壓縮后的圖片文件 // TODO 業(yè)務(wù)邏輯 } @Override public void onError(Throwable e) { // 壓縮過程中發(fā)生錯誤的回調(diào) Toast.makeText(getContext(), "圖片壓縮異常", Toast.LENGTH_SHORT).show(); } }).launch(); // 啟動壓縮任務(wù)
壓縮效果還是不錯的,幾兆的圖片被壓縮成100k左右,十倍以上的壓縮比例了,對圖片清晰度影響不是很大。base64之后也只有十幾萬字符了。
仿微信壓縮策略
據(jù)說Luban是仿照微信朋友圈圖片的壓縮策略,逆推出的壓縮算法,屬實有點東西,并且實用接地氣,有人把兩者做了對比,基本相差不多了。
除了Luban外,還有不少圖片壓縮工具,對于普通需求來說,可能都是夠用的,不用特別糾結(jié)使用哪個。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。