當前位置:成語大全網 - 漢語詞典 - Java壓縮算法——Java是如何實現在長寬比不變的情況下,將壹個大尺寸壓縮到指定尺寸的?

Java壓縮算法——Java是如何實現在長寬比不變的情況下,將壹個大尺寸壓縮到指定尺寸的?

java如何將壹幅大圖壓縮成指定大小、長寬比相同的圖片,即圖片壓縮?您可以在不修改任何大小的情況下修改大小壓縮(快速),或者按比例修改大小壓縮(慢速)。

這裏有壹個等比例縮小圖片的方法。

publicStringcompressPic(StringinputDir,StringoutputDir,

StringinputFileName,StringoutputFileName,intwidth,

intheight,booleangp,string zm){

嘗試{

如果(!()){

返回“”;

}

Imageimg=(圖像);

//判斷圖片格式是否正確。

if((null)==-1){

返回“否”;

}否則{

intnewWidthintnewHeight

//判斷是否是比例縮放。

if(gp==true){

//計算輸出圖片的寬度和高度,進行比例縮放。

double rate 1 =((double)(null))/(double)width;

double rate 2 =((double)(null))/(double)height;

//按照較大的縮放比例進行縮放控制。

double rate = rate 1 & gt;rate2?rate 1:rate 2;

new width =(int)(((double)(null))/rate);

new height =(int)(((double)(null))/rate);

}否則{

new width =(null);//輸出圖片的寬度

new height =(null);//輸出圖片高度

}

BufferedImagetag = newBufferedImage((INT)new width,(int)newHeight,_ INT _ RGB);

/*

*_SMOOTH的縮略圖算法生成縮略圖圖像的平滑度

*優先級高於速度,圖像質量越好,但速度越慢。

*/

Imageim=(newWidth,newHeight,_ SMOOTH);

().drawImage(im,0,0,null);

file output stream out = newfile output stream(output dir+output filename);

//JPEGImageEncoder可以應用於其他圖片類型的轉換。

JPEGImageEncoderencoder =(out);

(標簽);

();

}

}catch(IOExceptionex){

();

}

返回“ok”;

}

java如何將壹幅大圖壓縮成壹幅指定大小、長寬比相同的圖片?Java可以嘗試以下操作,將壹幅大圖壓縮成指定大小、長寬比相同的圖片:

創建壹個仿射變換。

仿射變換(doublem00,doublem10,doublem01,doublem11,doublem02,doublem12)

轉換矩陣,縮放比較簡單(矩陣可以做很多事情,想做圖像處理軟件可以研究壹下)

[x '][m00m 01m 02][x][m00x+m 01y+m02]

[y ']=[m 10m 11m 12][y]=[m 10x+m 11y+m 12]

[1][001][1][1]

10次很難計算(根號10,當然妳想算也可以),9次比較好(9的根是3),m00是1/3,m01是0,m02是0,m10是0,m65438是0。

構建另壹個AffineTransformOp並傳入上面的轉換。

affinitetransformop(affinitetransformxform,intinterpolationType)

最後調用AffineTransformOp的bufferedImagefilter(Bufferedimagesrc,Bufferedimagedst),src傳輸原圖。返回值是想要的圖像。註意是返回值,不是dst。如果妳不明白,妳可以看看JavaAPI。

java圖片的壓縮比是1。Java壓縮圖片是按比例壓縮的。

publicstaticvoidmain(String[]args){

嘗試{

//圖片所在的路徑

bufferedimagetemplateimage =(new file(" c:\ \ users \ \ Yan丁琪媛\ \ Pictures \ \ picture 1 . png "));

//原始圖片的長度和寬度

in thigh =();

int width =();

//按比例壓縮

floatscale = 0.5f

//通過固定長度壓縮

/* intdoWithHeight = 100;

intdowithWidth = 300*/

//壓縮後的長度和寬度

intdoWithHeight =(int)(scale * height);

intdowithWidth =(int)(scale * width);

bufferedimage final image = newBufferedImage(dowithWidth,doWithHeight,_ INT _ RGB);

().drawImage((dowithWidth,doWithHeight,_SMOOTH),0,0,null);

//圖像輸出路徑和圖像名稱

file output stream file output stream = newfile output stream(" D:/image/");

JPEGImageEncoderencoder =(file output stream);

(final image);

();

}catch(IOExceptione){

e . printstacktrace();

}

}

1

2

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

1

2

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

文章知識