這裏有壹個等比例縮小圖片的方法。
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
文章知識