【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)一個圖片壓縮工具類_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)一個圖片壓縮工具類_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)一個圖片壓縮工具類_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)一個圖片壓縮工具類_第4頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論