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