一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java中上傳圖片壓縮處理的方法示例

Java中上傳圖片壓縮處理的方法示例

2020-08-18 11:09cuisuqiang Java教程

本篇文章主要介紹了Java中圖片壓縮處理的方法示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

整理文檔,搜刮出一個Java圖片壓縮的代碼,稍微整理精簡一下做下分享。

首先,要壓縮的圖片格式不能說動態圖片,你可以使用bmp、png、gif等,至于壓縮質量,可以通過BufferedImage來指定。

在C盤的temp下放置一張圖片pic123.jpg,盡量找一個像素高一點的圖片,這里我找了一張5616*3744的。

?
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
package test;
import java.io.*;
import java.util.Date;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.*;
/**
 * 圖片壓縮處理
 * @author 崔素強
 */
public class ImgCompress {
  private Image img;
  private int width;
  private int height;
  @SuppressWarnings("deprecation")
  public static void main(String[] args) throws Exception {
    System.out.println("開始:" + new Date().toLocaleString());
    ImgCompress imgCom = new ImgCompress("C:\\temp\\pic123.jpg");
    imgCom.resizeFix(400, 400);
    System.out.println("結束:" + new Date().toLocaleString());
  }
  /**
   * 構造函數
   */
  public ImgCompress(String fileName) throws IOException {
    File file = new File(fileName);// 讀入文件
    img = ImageIO.read(file);   // 構造Image對象
    width = img.getWidth(null);  // 得到源圖寬
    height = img.getHeight(null); // 得到源圖長
  }
  /**
   * 按照寬度還是高度進行壓縮
   * @param w int 最大寬度
   * @param h int 最大高度
   */
  public void resizeFix(int w, int h) throws IOException {
    if (width / height > w / h) {
      resizeByWidth(w);
    } else {
      resizeByHeight(h);
    }
  }
  /**
   * 以寬度為基準,等比例放縮圖片
   * @param w int 新寬度
   */
  public void resizeByWidth(int w) throws IOException {
    int h = (int) (height * w / width);
    resize(w, h);
  }
  /**
   * 以高度為基準,等比例縮放圖片
   * @param h int 新高度
   */
  public void resizeByHeight(int h) throws IOException {
    int w = (int) (width * h / height);
    resize(w, h);
  }
  /**
   * 強制壓縮/放大圖片到固定的大小
   * @param w int 新寬度
   * @param h int 新高度
   */
  public void resize(int w, int h) throws IOException {
    // SCALE_SMOOTH 的縮略算法 生成縮略圖片的平滑度的 優先級比速度高 生成的圖片質量比較好 但速度慢
    BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB ); 
    image.getGraphics().drawImage(img, 0, 0, w, h, null); // 繪制縮小后的圖
    File destFile = new File("C:\\temp\\456.jpg");
    FileOutputStream out = new FileOutputStream(destFile); // 輸出到文件流
    // 可以正常實現bmp、png、gif轉jpg
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    encoder.encode(image); // JPEG編碼
    out.close();
  }
}

運行后在C盤temp下生成一個465.jpg,像素大小為600*400,像素大小是我指定的。用時也就是一兩秒的事情,注意,我這張圖片是10M的,壓縮后是40.5KB。

一些細節事項可以參考代碼中的注釋。

要注意的是,你可能想試一試較大圖片的處理能力,如果你的JDK沒有指定默認內存,那可能會有如下異常,因為內存不夠大:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
開始:2014-4-14 16:25:11
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
  at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:58)
  at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397)
  at java.awt.image.Raster.createWritableRaster(Raster.java:938)
  at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1169)
  at javax.imageio.ImageReader.getDestination(ImageReader.java:2879)
  at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:943)
  at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:915)
  at javax.imageio.ImageIO.read(ImageIO.java:1422)
  at javax.imageio.ImageIO.read(ImageIO.java:1282)
  at test.ImgCompress.<init>(ImgCompress.java:31)
  at test.ImgCompress.main(ImgCompress.java:21)

解決方法:

在Eclipse里選:Window->Preference->Installed JREs->Edit(選中jre),

在Default VM Arguments里輸入-Xms256m -Xmx1024m,表示最小內存256M,最大1G,然后運行就可以了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://cuisuqiang.iteye.com/blog/2045855

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99精品久久精品一区二区 | 日本三级免费看 | 日本生活中的玛丽 | 91精品久久 | 精品一成人岛国片在线观看 | 欧美日韩亚洲国内综合网俺 | 国产不卡视频 | 久久中文字幕乱码免费 | 俄罗斯美女破苞 | 国产普通话对白露脸流出 | 狠狠婷婷综合缴情亚洲 | 婷婷色天使在线视频观看 | 深夜a| 欧美人做人爱a全程免费 | 亚洲系列国产系列 | 国产自在自线午夜精品之la | 精品国产国产综合精品 | 国语刺激对白勾搭视频在线观看 | 青春草视频免费观看 | 翁熄性放纵交换300章 | 欧美日韩免费一区二区在线观看 | 好大好湿好硬好爽好深免费视频 | 91亚洲一区二区在线观看不卡 | 成人永久免费 | 国产精品理论片 | 毛片小视频 | 精品国产综合区久久久久久 | 欧美成人精品福利在线视频 | 欧洲第一区第二区第三区 | nxgx欧美 | 日韩免费一级 | 久久精品国产在热亚洲完整版 | 免费视频精品一区二区三区 | 亚洲成人福利网站 | 亚洲另类激情 | free性丰满hd性欧美厨房 | 国产成人久久精品一区二区三区 | 2020年新四虎免费 | 好大好爽好硬我要喷水了 | 亚洲一区 在线播放 | 第四色男人天堂 |