十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
java要實(shí)現(xiàn)把一個(gè)大圖片壓縮到指定大小的圖片且長(zhǎng)寬比不變可以嘗試以下操作:
連山網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
建立一個(gè)AffineTransform
AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)
轉(zhuǎn)換矩陣,縮放比較簡(jiǎn)單(矩陣可以干很多事情,想做圖像處理軟件可以研究下)
[ x'] [ m00 m01 m02 ] [ x ] [ m00x + m01y + m02 ]
[ y'] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ]
[ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]
10倍比較難算(根號(hào)10啊,當(dāng)然你想算也行),9倍好點(diǎn)(9的開(kāi)方是3),m00為1/3,m01為0,m02為0,m10為0,m11為1/3,m12為0。
再建一個(gè)AffineTransformOp,把上面的轉(zhuǎn)換傳進(jìn)去
AffineTransformOp(AffineTransform xform, int interpolationType)
最后調(diào)用AffineTransformOp的BufferedImage filter(BufferedImage src, BufferedImage dst) ,src傳原圖片,返回值就是想要的Image,注意是返回值,不是dst,不明白可以看下Java API
java中g(shù)ui界面設(shè)置背景圖片文件格式轉(zhuǎn)換框架完讓圖片壓縮。一種是用Graphics+文件格式轉(zhuǎn)換框架完成,這種麻煩,代碼量多一些壓縮出的圖片質(zhì)量會(huì)更好,另一種是用Google的一個(gè)開(kāi)源框架thumbna。
java壓縮圖片,按照比例進(jìn)行壓縮
public static void main(String[] args) {
try {
//圖片所在路徑
BufferedImage templateImage = ImageIO.read(new File("C:\\Users\\晏丁丁\\Pictures\\圖片1.png"));
//原始圖片的長(zhǎng)度和寬度
int height = templateImage.getHeight();
int width = templateImage.getWidth();
//通過(guò)比例壓縮
float scale = 0.5f;
//通過(guò)固定長(zhǎng)度壓縮
/*int doWithHeight = 100;
int dowithWidth = 300;*/
//壓縮之后的長(zhǎng)度和寬度
int doWithHeight = (int) (scale * height);
int dowithWidth = (int) (scale * width);
BufferedImage finalImage = new BufferedImage(dowithWidth, doWithHeight, BufferedImage.TYPE_INT_RGB);
finalImage.getGraphics().drawImage(templateImage.getScaledInstance(dowithWidth, doWithHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
//圖片輸出路徑,以及圖片名
FileOutputStream fileOutputStream = new FileOutputStream("D:/image/tupian.jpg");
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);
encoder.encode(finalImage);
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
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
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
文章知
縮小即可。javathumbnails壓縮圖片占用內(nèi)存過(guò)大的解決辦法:
1、打開(kāi)壓縮圖網(wǎng)站,點(diǎn)擊選擇圖片壓縮按鈕。
2、圖片上傳前網(wǎng)站默認(rèn)的壓縮等級(jí)是70,圖片上傳后會(huì)自動(dòng)按照當(dāng)前設(shè)置的壓縮等級(jí)進(jìn)行壓縮,如果壓縮后的大小不合要求,可再次設(shè)置圖片的寬高尺寸、壓縮等級(jí)等參數(shù),寬高留空時(shí)默認(rèn)按照原圖尺寸進(jìn)行壓縮,壓縮等級(jí)越小則壓縮后的圖片體積越小,最后點(diǎn)擊開(kāi)始?jí)嚎s按鈕重新壓縮。
3、圖片壓縮后,我們就能明顯的看到圖片壓縮后的體積縮小了很多,點(diǎn)擊“保存圖片”即可。