導航:首頁 > 文件處理 > android壓縮圖片比例

android壓縮圖片比例

發布時間:2022-12-19 22:45:21

A. 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

B. 說說在 Android 中如何壓縮圖片

1:ByteArrayOutputStream 壓縮圖片質量,不會改變圖片大小

java">privateBitmapcompressImage(Bitmapimage){

ByteArrayOutputStreambaos=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}
ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());//把壓縮後的數據baos存放到ByteArrayInputStream中
Bitmapbitmap=BitmapFactory.decodeStream(isBm,null,null);//把ByteArrayInputStream數據生成圖片
returnbitmap;
}

2:就是改變圖片大小

privateBitmapgetimage(StringsrcPath){
BitmapFactory.OptionsnewOpts=newBitmapFactory.Options();//開始讀入圖片,此時把options.inJustDecodeBounds設回true了
newOpts.inJustDecodeBounds=true;
Bitmapbitmap=BitmapFactory.decodeFile(srcPath,newOpts);//此時返回bm為空
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了
bitmap=BitmapFactory.decodeFile(srcPath,newOpts);returncompressImage(bitmap);//壓縮好比例大小後再進行質量壓縮}

C. 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);//壓縮好比例大小後再進行質量壓縮

}

D. 說說在 Android 中如何壓縮圖片

目前存在兩種壓縮圖片方式:

而圖片有三種存在形式:

bigmap 在內存中的大小是按像素計算的,也就是width * height,所以如果需要在 Android 中顯示照片,那麼就必須進行按比例壓縮,避免因為內存消耗過大,導致 APP 退出。

是不是很簡單呀 O(∩_∩)O哈哈~

E. 怎樣在安卓系統上壓縮圖片大小

安卓系統是手機系統,我們很少在手機上進行壓縮,有的手機是有壓縮功能的,想小米,oppo類的手機上有這種功能,壓縮效果並不樂觀,電腦上執行壓縮小編例舉了一下步驟:

a、打開任意瀏覽器,點擊瀏覽器的搜索框,在這里搜索圖片壓縮,選擇網頁搜索,我們要找到下載工具的網頁,將工具下載安裝到我們的電腦。

其實圖片文件壓縮是一個簡單的過程,但是我們要找對圖片文件壓縮的軟體,進行圖片壓縮就是一件簡單的事情

F. android 如何壓縮png圖片位元組數

如果你只是覺得程序背景圖片大的話 這個應該是美工的問題 找個專業的美工設計下就Ok的

如果是程序中想壓縮圖片的話 網上的方法很多

下面代碼是將圖片按比例大小壓縮方法(根據Bitmap圖片壓縮)

privateBitmapcomp(Bitmapimage){

ByteArrayOutputStreambaos=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中
}
ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());
BitmapFactory.OptionsnewOpts=newBitmapFactory.Options();
//開始讀入圖片,此時把options.inJustDecodeBounds設回true了
newOpts.inJustDecodeBounds=true;
Bitmapbitmap=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;//設置縮放比例
newOpts.inPreferredConfig=Config.RGB_565;//降低圖片從ARGB888到RGB565
//重新讀入圖片,注意此時已經把options.inJustDecodeBounds設回false了
isBm=newByteArrayInputStream(baos.toByteArray());
bitmap=BitmapFactory.decodeStream(isBm,null,newOpts);
returncompressImage(bitmap);//壓縮好比例大小後再進行質量壓縮
}

【ps:看你自己的需要吧 給個地方做參考 http://my.eoe.cn/isnull/archive/564.html 你也可以搜索下 其他的方法 】

G. 手機怎麼壓縮照片大小kb

手機壓縮照片大小kb的方法:

准備材料:vivo NEX A、Android10、APP版本:v7.1.0.5

1、在手機桌面上找到文件管理並點擊進入。


H. android等比例縮放圖片的方法

itmap icon = null;//原始圖片
int width = icon.getWidth(), height = icon.getHeight();
float scaleRate = 0.8f;//縮小的比例
while(width >= 300 || width >= 300) {
Matrix matrix = new Matrix();
matrix.postScale(width * scaleRate, height * scaleRate);
// 得到新的圖片
Bitmap newIcon = Bitmap.createBitmap(icon, 0, 0, width, height, matrix, true);
icon.recycle();
icon = newIcon;
width = icon.getWidth(), height = icon.getHeight();
}int width = icon.getWidth(), height = icon.getHeight();

if(width > 300 || width > 300) {
float scaleRate = width > height ? 300 / width : 300 / height;
Matrix matrix = new Matrix();
matrix.postScale(width * scaleRate, height * scaleRate);
// 得到新的圖片
Bitmap newIcon = Bitmap.createBitmap(icon, 0, 0, width, height, matrix, true);
icon.recycle();
icon = newIcon;
}

I. 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

J. 圖片壓縮的三種方式

1、等比壓縮,等比壓縮是保持原圖長寬比例的壓縮,只是圖片變小,展示的還是原圖的所有內容(區別於第二種通過Matrix壓縮,可以選取圖片的一部分,類似於上傳頭像時,讓你在圖上選一塊zoom的形式)。等比壓縮用的的主要是BitmapFactory.Options,通過options縮放比例的設置,來生成縮略圖:

2、通過Matrix進行更加靈活的縮放:這種方式主要是通過構建縮放矩陣和Bitmap.createBitmap方法來實現靈活縮放,寬和高縮放的比例可以不一致,而且通過Bitmap.createBitmap方法創建出來的是新的點陣圖,這個點陣圖可以是選取原圖的一部分,而不是對原圖進行整體縮放!類似於上傳頭像時,讓你在原圖上扣下來一塊的效果,控制非常靈活。
3、無損壓縮,無損壓縮是說圖片大小和清晰度看上去和原圖沒有什麼差別,但是確實size縮小了,這里縮小的原理是犧牲了解析度等其他直觀看不到的東西,看起來和原圖一樣,但是一放大就立馬失真了,不會和原圖一樣放大很多才會逐漸變得不清晰。無損壓縮後的圖片像素並不會減少,而Bitmap佔用內存的定義就是像素點占的內存,所以以Bitmap的方式載入到內存中時,和壓縮前佔用的內存是同樣大的,原來會oom的圖片,質量壓縮後同樣會oom;但是,質量壓縮後將流輸出到文件中,文件的size會大幅度減小,所以質量壓縮特別適合在 Android 端進行圖片上傳的時候進行圖片壓縮,既能保持上傳後的清晰度,又能減小size。另外質量壓縮不是可以無限縮小的,降低到一定程度,就算把quality設置的再小,size也不會再降低了。另外這種方式最好返回保存壓縮後的圖片保存的文件路徑,而不要直接返回Bitmap,示例就懶得改了。

一張圖片處理過程,建議先進行等比壓縮或者Matrix壓縮後,再進行質量壓縮,這樣組合使用,不管是生成縮略圖還是圖片上傳,效果都不錯

閱讀全文

與android壓縮圖片比例相關的資料

熱點內容
家庭寬頻如何連接伺服器 瀏覽:117
汽車高壓泵解壓 瀏覽:770
上門正骨用什麼app 瀏覽:758
安卓為什麼免費使用 瀏覽:397
加密貨幣都有哪些平台 瀏覽:625
python和matlab難度 瀏覽:388
python爬蟲很難學么 瀏覽:572
小米解壓積木可以組成什麼呢 瀏覽:816
為什麼滴滴出行app還能用 瀏覽:564
怎麼升級手機android 瀏覽:922
php權威編程pdf 瀏覽:994
扣扣加密技巧 瀏覽:720
蘋果如何創建伺服器錯誤 瀏覽:497
軟考初級程序員大題分值 瀏覽:475
js壓縮視頻文件 瀏覽:580
linux如何通過命令創建文件 瀏覽:991
應用加密app還能訪問應用嘛 瀏覽:435
安卓怎麼用支付寶交違章罰款 瀏覽:667
php面向對象的程序設計 瀏覽:506
數據挖掘演算法書籍推薦 瀏覽:896