下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)一個圖片壓縮工具類
本篇文章為大家展示了Android中怎么實現(xiàn)一個圖片壓縮工具類,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。具體如下:package
com.sanweidu.TddPay.util2;
import
java.io.ByteArrayInputStream;
import
java.io.ByteArrayOutputStream;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
public
class
ImaZipUtil
{
/**
*
壓縮圖片到指定寬高,并進行質(zhì)量壓縮,最終大小保持在100K以下
*
*
@param
sourceBm
*
@param
targetWidth
*
@param
targetHeight
*
@return
*/
public
static
Bitmap
zipPic(Bitmap
sourceBm,
float
targetWidth,
float
targetHeight)
{
BitmapFactory.Options
newOpts
=
new
BitmapFactory.Options();
//
開始讀入圖片,此時把options.inJustDecodeBounds
設(shè)回true了
newOpts.inJustDecodeBounds
=
true;
//
可刪除
newOpts.inPurgeable
=
true;
//
可共享
newOpts.inInputShareable
=
true;
//
轉(zhuǎn)成數(shù)組
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream();
sourceBpress(Bitmap.CompressFormat.JPEG,
100,
baos);
byte[]
temp
=
baos.toByteArray();
//
此時返回bm為空
Bitmap
bitmap
=
BitmapFactory.decodeByteArray(temp,
0,
temp.length,
newOpts);
newOpts.inJustDecodeBounds
=
false;
int
w
=
newOpts.outWidth;
int
h
=
newOpts.outHeight;
//
現(xiàn)在主流手機比較多是800*480分辨率,所以高和寬我們設(shè)置為
float
hh
=
targetHeight;
float
ww
=
targetWidth;
//
縮放比。由于是固定比例縮放,只用高或者寬其中一個數(shù)據(jù)進行計算即可
int
be
=
1;//
be=1表示不縮放
//
如果寬度大的話根據(jù)寬度固定大小縮放
if
(w
>
h
&&
w
>
ww)
{
be
=
(int)
(newOpts.outWidth
/
ww);
}
else
if
(w
<
h
&&
h
>
hh)
{
//
如果高度高的話根據(jù)寬度固定大小縮放
be
=
(int)
(newOpts.outHeight
/
hh);
}
if
(be
<=
0)
{
be
=
1;
}
//
設(shè)置縮放比例
newOpts.inSampleSize
=
be;
//
重新讀入圖片,注意此時已經(jīng)把options.inJustDecodeBounds
設(shè)回false了
bitmap
=
BitmapFactory.decodeByteArray(temp,
0,
temp.length,
newOpts);
//
壓縮好比例大小后再進行質(zhì)量壓縮
return
compressImage(bitmap);
}
/**
*
@Description
質(zhì)量壓縮方法
*
@author
XiongJie
*
@param
image
*
@return
*/
public
static
Bitmap
compressImage(Bitmap
image)
{
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream();
//
質(zhì)量壓縮方法,這里100表示不壓縮,把壓縮后的數(shù)據(jù)存放到baos中
press(Bitmap.CompressFormat.JPEG,
100,
baos);
int
options
=
100;
//
循環(huán)判斷如果壓縮后圖片是否大于100kb,大于繼續(xù)壓縮
while
(baos.toByteArray().length
/
1024
>
100)
{
//
重置baos即清空baos
baos.reset();
//
這里壓縮options%,把壓縮后的數(shù)據(jù)存放到baos中
press(Bitmap.CompressFormat.JPEG,
options,
baos);
//
每次都減少10
options
-=
10;
}
//
把壓縮后的數(shù)據(jù)baos存放到ByteArrayInputStream中
ByteArrayInputStream
isBm
=
new
ByteArrayInputStream(baos.toByteArray());
//
把ByteArrayInputStream數(shù)據(jù)生成圖片
Bitmap
bitmap
=
BitmapFactory.decodeStream(isBm,
null,
null);
return
bitmap;
}
/**
*
只進行分辨率壓縮,不進行圖片的質(zhì)量壓縮
*
*
@param
sourceBm
*
@param
targetWidth
*
@param
targetHeight
*
@return
*/
public
static
Bitmap
zipPicWithoutCompress(Bitmap
sourceBm,
float
targetWidth,
float
targetHeight)
{
BitmapFactory.Options
newOpts
=
new
BitmapFactory.Options();
//
開始讀入圖片,此時把options.inJustDecodeBounds
設(shè)回true了
newOpts.inJustDecodeBounds
=
true;
//
可刪除
newOpts.inPurgeable
=
true;
//
可共享
newOpts.inInputShareable
=
true;
//
轉(zhuǎn)成數(shù)組
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream();
sourceBpress(Bitmap.CompressFormat.JPEG,
100,
baos);
byte[]
temp
=
baos.toByteArray();
//
此時返回bm為空
Bitmap
bitmap
=
BitmapFactory.decodeByteArray(temp,
0,
temp.length,
newOpts);
newOpts.inJustDecodeBounds
=
false;
int
w
=
newOpts.outWidth;
int
h
=
newOpts.outHeight;
//
現(xiàn)在主流手機比較多是800*480分辨率,所以高和寬我們設(shè)置為
float
hh
=
targetHeight;
float
ww
=
targetWidth;
//
縮放比。由于是固定比例縮放,只用高或者寬其中一個數(shù)據(jù)進行計算即可
//
be=1表示不縮放
int
be
=
1;
if
(w
>
h
&&
w
>
ww)
{
//
如果寬度大的話根據(jù)寬度固定大小縮放
be
=
(int)
(newOpts.outWidth
/
ww);
}
else
if
(w
<
h
&&
h
>
hh)
{
//
如果高度高的話根據(jù)寬度固定大小縮放
be
=
(int)
(newOpts.outHeight
/
hh);
}
if
(be
<=
0)
{
be
=
1;
}
//
設(shè)置縮放比例
n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【名師一號】2020-2021學(xué)年高中地湘教版選修6-雙基限時練1
- 吉林省松原市前郭五中2024~2025學(xué)年高二上期末考試 歷史(含答題卡、答案)
- 《兒童發(fā)展關(guān)鍵期》課件
- 第三次月考測評卷(Lesson7 ~ 9)綜合測評卷 2024-2025學(xué)年科普版(三起)英語五年級上冊(含答案)
- 《金版學(xué)案》2022屆高考化學(xué)一輪復(fù)習(xí)習(xí)題-第2章-第4節(jié)-銅及其化合物-金屬材料-
- 安徽省渦陽縣王元中學(xué)2024-2025學(xué)年第一學(xué)期七年級期末考試語文試卷(含答案)
- 2022《創(chuàng)新設(shè)計》高考歷史大一輪復(fù)習(xí)專題探究提升訓(xùn)練8
- 【創(chuàng)新設(shè)計】2021高考化學(xué)總復(fù)習(xí)(江西版)作業(yè)本:第11章-課時5-基本營養(yǎng)物質(zhì)-有機高分子化合物
- 酒店餐飲部工作總結(jié)
- 三年級數(shù)學(xué)(上)計算題專項練習(xí)附答案
- 期末試卷(試題)-2024-2025學(xué)年滬教版三年級上冊數(shù)學(xué)
- 句子成分及句子基本結(jié)構(gòu)(共32張PPT)
- 水上拋石護坡施工方案
- 燃氣鍋爐房和直燃機房防爆問題
- 物料提升機基礎(chǔ)方案
- 840dsl常用參數(shù)
- 員工入職體檢表
- 連續(xù)油管鉆井技術(shù)課件
- 企業(yè)員工培訓(xùn)的現(xiàn)狀及對策的研究
- 以童謠文化建設(shè)推進學(xué)校辦學(xué)特色實踐探究
- 中學(xué)數(shù)學(xué)課堂教學(xué)評價表
評論
0/150
提交評論