Android中3種圖片壓縮處理方法

來源:互聯網
上載者:User

Android中3種圖片壓縮處理方法

   這篇文章主要介紹了Android中3種圖片壓縮處理方法,本文講解了品質壓縮方法、獲得縮圖、圖片縮放三種方法並分別給出範例程式碼,需要的朋友可以參考下

  Android中圖片的存在形式:

  1:檔案形式:二進位形式存在與硬碟中。

  2:流的形式:二進位形式存在與記憶體中。

  3:Bitmap的形式

  三種形式的區別:

  檔案形式和流的形式:對圖片體積大小並沒有影響。也就是說,如果你手機SD卡上的圖片通過流的形式讀到記憶體中,在記憶體中的大小也是原圖的大小。

  注意:不是Bitmap的形式。

  Bitmap的形式:圖片佔用的記憶體會瞬間變大。

  以下是代碼的形式:

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

/**

* 圖片壓縮的方法總結

*/

 

/*

* 圖片壓縮的方法01:品質壓縮方法

*/

private Bitmap compressImage(Bitmap beforBitmap) {

 

// 可以捕獲記憶體緩衝區的資料,轉換成位元組數組。

ByteArrayOutputStream bos = new ByteArrayOutputStream();

if (beforBitmap != null) {

// 第一個參數:圖片壓縮的格式;第二個參數:壓縮的比率;第三個參數:壓縮的資料存放到bos中

beforBitmap.compress(CompressFormat.JPEG, 100, bos);

int options = 100;

// 迴圈判斷壓縮後的圖片是否是大於100kb,如果大於,就繼續壓縮,否則就不壓縮

while (bos.toByteArray().length / 1024 > 100) {

bos.reset();// 置為空白

// 壓縮options%

beforBitmap.compress(CompressFormat.JPEG, options, bos);

// 每次都減少10

options -= 10;

 

}

// 從bos中將資料讀出來 存放到ByteArrayInputStream中

ByteArrayInputStream bis = new ByteArrayInputStream(

bos.toByteArray());

// 將資料轉換成圖片

Bitmap afterBitmap = BitmapFactory.decodeStream(bis);

return afterBitmap;

}

return null;

}

 

/*

* 圖片壓縮方法02:獲得縮圖

*/

public Bitmap getThumbnail(int id) {

// 獲得原圖

Bitmap beforeBitmap = BitmapFactory.decodeResource(

mContext.getResources(), id);

// 寬

int w = mContext.getResources()

.getDimensionPixelOffset(R.dimen.image_w);

// 高

int h = mContext.getResources().getDimensionPixelSize(R.dimen.image_h);

 

// 獲得縮圖

Bitmap afterBitmap = ThumbnailUtils

.extractThumbnail(beforeBitmap, w, h);

return afterBitmap;

 

}

 

/**

* 圖片壓縮03

*

* @param id

* 要操作的圖片的大小

* @param newWidth

* 圖片指定的寬度

* @param newHeight

* 圖片指定的高度

* @return

*/

public Bitmap compressBitmap(int id, double newWidth, double newHeight) {

// 獲得原圖

Bitmap beforeBitmap = BitmapFactory.decodeResource(

mContext.getResources(), id);

// 圖片原有的寬度和高度

float beforeWidth = beforeBitmap.getWidth();

float beforeHeight = beforeBitmap.getHeight();

 

// 計算寬高縮放率

float scaleWidth = 0;

float scaleHeight = 0;

if (beforeWidth > beforeHeight) {

scaleWidth = ((float) newWidth) / beforeWidth;

scaleHeight = ((float) newHeight) / beforeHeight;

} else {

scaleWidth = ((float) newWidth) / beforeHeight;

scaleHeight = ((float) newHeight) / beforeWidth;

}

 

// 矩陣對象

Matrix matrix = new Matrix();

// 縮放圖片動作 縮放比例

matrix.postScale(scaleWidth, scaleHeight);

// 建立一個新的Bitmap 從原始映像剪下映像

Bitmap afterBitmap = Bitmap.createBitmap(beforeBitmap, 0, 0,

(int) beforeWidth, (int) beforeHeight, matrix, true);

return afterBitmap;

 

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.