A. android縮放圖片到指定大小顯示的兩種方法
第一種用 BitmapFactory.Options
先用 options.inJustDecodeBounds = true; 只載入獲得圖片的寬高,獲得相應的sampleSize,然後再次解析即可。
但是這樣有個坑是,沒辦法獲得指定大小的圖,只能是2的冪次方。所以最終獲取的寬高小於等於指定大小。
第二種 用矩陣 Matrix ,可以縮放到指定大小。
根據scale
B. android圖片壓縮避免OOM
簡單吹下牛:很多app都會要載入圖片,但是如果不壓縮圖片就很容易OOM,
個人看來OOM 出現原因總的來說分為兩種:
一種是內存溢出(好像在扯淡,OOM本身就是內存溢出)
另一種是:圖片過大,一個屏幕顯示不完全造成,似乎也是一。。 如有錯誤純屬扯淡;
為了避免上面的情況:載入圖片的時候可以進行壓縮,上傳的時候要可以進行壓縮,在圖片不可見的時候進行回收(onDetach()),再吹一句 用了fresco+壓縮之後載入圖片完全沒問題了。
一、質量壓縮方法:
privateBitmap compressImage(Bitmap image) {
ByteArrayOutputStream baos =newByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,100, baos);//質量壓縮方法,這里100表示不壓縮,把壓縮後的數據存放到baos中
intoptions =100;
while( baos.toByteArray().length /1024>100) {//循環判斷如果壓縮後圖片是否大於100kb,大於繼續壓縮
baos.reset();//重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG, options, baos);//這里壓縮options%,把壓縮後的數據存放到baos中
options -=10;//每次都減少10
}
ByteArrayInputStream isBm =newByteArrayInputStream(baos.toByteArray());//把壓縮後的數據baos存放到ByteArrayInputStream中
Bitmap bitmap = BitmapFactory.decodeStream(isBm,null,null);//把ByteArrayInputStream數據生成圖片
returnbitmap;
}
二、圖片按比例大小壓縮方法(根據Bitmap圖片壓縮)
privateBitmap comp(Bitmap image) {
ByteArrayOutputStream baos =newByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,100, baos);
if( baos.toByteArray().length /1024>1024) {//判斷如果圖片大於1M,進行壓縮避免在生成圖片(BitmapFactory.decodeStream)時溢出
baos.reset();//重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG,50, baos);//這里壓縮50%,把壓縮後的數據存放到baos中
}
ByteArrayInputStream isBm =newByteArrayInputStream(baos.toByteArray());
BitmapFactory.Options newOpts =newBitmapFactory.Options();
//開始讀入圖片,此時把options.inJustDecodeBounds 設回true了
newOpts.inJustDecodeBounds =true;
Bitmap bitmap = BitmapFactory.decodeStream(isBm,null, newOpts);
newOpts.inJustDecodeBounds =false;
intw = newOpts.outWidth;
inth = newOpts.outHeight;
//現在主流手機比較多是800*480解析度,所以高和寬我們設置為
floathh = 800f;//這里設置高度為800f
floatww = 480f;//這里設置寬度為480f
//縮放比。由於是固定比例縮放,只用高或者寬其中一個數據進行計算即可
intbe =1;//be=1表示不縮放
if(w > h && w > ww) {//如果寬度大的話根據寬度固定大小縮放
be = (int) (newOpts.outWidth / ww);
}elseif(w < h && h > hh) {//如果高度高的話根據寬度固定大小縮放
be = (int) (newOpts.outHeight / hh);
}
if(be <=0)
be =1;
newOpts.inSampleSize = be;//設置縮放比例
//重新讀入圖片,注意此時已經把options.inJustDecodeBounds 設回false了
isBm =newByteArrayInputStream(baos.toByteArray());
bitmap = BitmapFactory.decodeStream(isBm,null, newOpts);
returncompressImage(bitmap);//壓縮好比例大小後再進行質量壓縮
}
C. 說說在 Android 中如何壓縮圖片
目前存在兩種壓縮圖片方式:
而圖片有三種存在形式:
bigmap 在內存中的大小是按像素計算的,也就是width * height,所以如果需要在 Android 中顯示照片,那麼就必須進行按比例壓縮,避免因為內存消耗過大,導致 APP 退出。
是不是很簡單呀 O(∩_∩)O哈哈~
D. 怎樣在安卓系統上壓縮圖片大小
安卓系統是手機系統,我們很少在手機上進行壓縮,有的手機是有壓縮功能的,想小米,oppo類的手機上有這種功能,壓縮效果並不樂觀,電腦上執行壓縮小編例舉了一下步驟:
a、打開任意瀏覽器,點擊瀏覽器的搜索框,在這里搜索圖片壓縮,選擇網頁搜索,我們要找到下載工具的網頁,將工具下載安裝到我們的電腦。

其實圖片文件壓縮是一個簡單的過程,但是我們要找對圖片文件壓縮的軟體,進行圖片壓縮就是一件簡單的事情
E. Android中壓縮圖片指定大小
注意看這句話,bit.compress(CompressFormat.PNG, 100, baos);
那裡的數字表示 如果不壓縮是100,表示壓縮率為0。
如果是70,就表示壓縮率是70,表示壓縮30%;
所以你的倒數第二句話表示沒有壓縮。
以下是我壓縮的方法,望採納。
/**
* 圖像壓縮並保存到本地
* 返回處理過的圖片
*
*/
private Bitmap
saveImage(String fileName,Bitmap bit) {
File file = new
File(fileName);
if (!file.exists()) {
try
{
file.createNewFile();
} catch (IOException e)
{
e.printStackTrace();
}
}
try
{
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bit.compress(CompressFormat.JPEG, 70,
stream);
// 70 是壓縮率,表示壓縮30%; 如果不壓縮是100,表示壓縮率為0
FileOutputStream os =
new
FileOutputStream(file);
os.write(stream.toByteArray());
os.close();
return
bit;
} catch (Exception e) {
file = null;
return
null;
}
}
F. 如何把圖片壓縮成指定大小
你可以用這種在線的圖片壓縮工具,就可以把圖片文件壓縮到你期望的體積大小,比如你將壓縮數值設置到100kb,稍等幾秒鍾之後,在線圖片壓縮工具就已經把圖片的文件大小壓縮到最高100kb了。換句話說,你設定壓縮到多少kb的期望值,他壓縮完的輸出圖片就是多少kb大小了,非常方便。在線智能圖片壓縮,壓縮圖片體積大小

在線圖片智能壓縮使用步驟:
一、首先點擊加號添加需要壓縮的圖片。目前已知支持對jpg、png、webp、bmp等多種常見的圖片格式進行壓縮,如果選擇圖片後正常顯示並能夠壓縮成功,則代表支持該圖片格式。
二、可以自行修改圖片需要被壓縮到的最大寬高尺寸,默認為圖片原始的寬高尺寸,並且寬高比例是自動鎖定的,確保圖片不會變形。
三、必須設置圖片被壓縮後,期望輸出的壓縮之後圖片文件的最大佔用空間,該選項是必填的。
四、選擇圖片壓縮的演算法。默認為智能混合壓縮演算法,絕大多數情況下使用默認演算法進行圖片壓縮即可。
五、當你設置壓縮後的大小單位為」Kb「時,壓縮大小的設定值不能小於1Kb,但圖片壓縮後的最終文件大小是可以小於1Kb的。
G. Android黑科技,圖片終極壓縮
一、支持自定義配置、不失真和批量處理
二、圖片上傳為什麼要壓縮
1、圖片伺服器空間限制,磁碟昂貴
2、網路不穩定,大文件需要斷點續傳
3、盡可能避免安卓OOM異常
4、後台約定的規則<200KB
5、需要上傳原圖的應用有醫院臨床項目、金融銀行
三、圖片壓縮流程
1、遞歸每張圖片
2、設置圖片格式 Bitmap.CompressFormat.JPG
png, jpg,webp
3、質量壓縮bitmap.compress(format,quality,baos)
由於png是無損壓縮,所以設置quality無效(不適合作為縮略圖)
采樣率壓縮BitmapFactory.Options.inSampleSize
縮小圖片解析度,減少所佔用磁碟空間和內存大小
縮放壓縮canvas.drawBitmap(bitmap, null,rectF,null)
減少圖片的像素,降低所佔用磁碟空間大小和內存大小,可用於緩存縮略圖
JNI調用JPEG庫
Android的圖片引擎使用的是閹割版的skia引擎,去掉了圖片壓縮中的哈夫曼演算法
4、像素修復
5、返回壓縮
6、完成壓縮
demo: https://github.com/ApeCold/Learn_Compress_Sample
參考:
Luban框架 https://github.com/Curzibn/Luban
缺點
1、當沒有設定壓縮路徑時,拋異常無閃退
2、源碼中,壓縮比率固定值60,無法修改
3、壓縮配置,參數不太適應真實項目需求
4、不能指定壓縮大小,比如100KB以內
https://github.com/zettsu/Compressor
H. Android圖片壓縮-大小與質量壓縮以及圖片保存
一、前言:
2.質量壓縮
注意:
第二次壓縮之前都要先清空 baos.reset(); 再進行壓縮 image.compress(Bitmap.CompressFormat.JPEG, quality, baos);
有時候我們採用質量壓縮沒有效果,有可能是每次壓縮的質量過小,所以我們可以嘗試修改壓縮質量(quality)是10;
quality壓縮機提示,0-100。0表示壓縮
小尺寸,100意味著最大質量的壓縮。一些
格式,如無損的PNG,將忽略質量設定;
3.混合方式壓縮
鏈接: https://www.jianshu.com/p/12835d5ebc72