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

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

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 詳解Java中使用ImageIO類對圖片進行壓縮的方法

詳解Java中使用ImageIO類對圖片進行壓縮的方法

2020-04-17 11:16chenzheng_java JAVA教程

這篇文章主要介紹了Java中使用ImageIO類對圖片進行壓縮的方法,能夠按指定的比例調整圖片的寬高,需要的朋友可以參考下

最近做項目需要圖片壓縮處理,網上找的方法大都使用了 com.sun.image.codec.jpeg.* 這個包中的JPEGImageEncoder類,引入這個包后一直報錯,各種google百度,嘗試了各種方法,包括手動引jre中的rt.jar,以及在eclipse中把受訪問限制的API提示從ERROR改為WARNING,等等,然而這些都是不好使的,因為后來我發現我的java-7-openjdk-amd64中的rt.jar里邊根本就沒有com.sun.image.*,貌似這個類在java7中已經被徹底remove了,至少我這個版本是沒有了。然后搜了個使用ImageIO類來進行處理的替代方案,代碼如下:
可以壓縮為任意大小,壓縮后高清,不變形(留白),可以改后綴名,可以修改壓縮分辨率。
可能有朋友也有這個需要,參考一下吧,有問題還請指證!

?
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
package cn.com.images;
 
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.util.ArrayList;
 
import javax.imageio.ImageIO;
 
/***
 * 對圖片進行操作
 *
 * @author chenzheng_java
 * @since 2011/7/29
 *
 */
public class ImageHelper {
 
  private static ImageHelper imageHelper = null;
 
  public static ImageHelper getImageHelper() {
    if (imageHelper == null) {
      imageHelper = new ImageHelper();
    }
    return imageHelper;
  }
 
  /***
   * 按指定的比例縮放圖片
   *
   * @param sourceImagePath
   *      源地址
   * @param destinationPath
   *      改變大小后圖片的地址
   * @param scale
   *      縮放比例,如1.2
   */
  public static void scaleImage(String sourceImagePath,
      String destinationPath, double scale,String format) {
 
    File file = new File(sourceImagePath);
    BufferedImage bufferedImage;
    try {
      bufferedImage = ImageIO.read(file);
      int width = bufferedImage.getWidth();
      int height = bufferedImage.getHeight();
 
      width = parseDoubleToInt(width * scale);
      height = parseDoubleToInt(height * scale);
 
      Image image = bufferedImage.getScaledInstance(width, height,
          Image.SCALE_SMOOTH);
      BufferedImage outputImage = new BufferedImage(width, height,
          BufferedImage.TYPE_INT_RGB);
      Graphics graphics = outputImage.getGraphics();
      graphics.drawImage(image, 0, 0, null);
      graphics.dispose();
 
      ImageIO.write(outputImage, format, new File(destinationPath));
    } catch (IOException e) {
      System.out.println("scaleImage方法壓縮圖片時出錯了");
      e.printStackTrace();
    }
 
  }
 
  /***
   * 將圖片縮放到指定的高度或者寬度
   * @param sourceImagePath 圖片源地址
   * @param destinationPath 壓縮完圖片的地址
   * @param width 縮放后的寬度
   * @param height 縮放后的高度
   * @param auto 是否自動保持圖片的原高寬比例
   * @param format 圖圖片格式 例如 jpg
   */
  public static void scaleImageWithParams(String sourceImagePath,
      String destinationPath, int width, int height, boolean auto,String format) {
     
    try {
    File file = new File(sourceImagePath);
    BufferedImage bufferedImage = null;
    bufferedImage = ImageIO.read(file);
      if (auto) {
        ArrayList<Integer> paramsArrayList = getAutoWidthAndHeight(bufferedImage,width,height);
        width = paramsArrayList.get(0);
        height = paramsArrayList.get(1);
        System.out.println("自動調整比例,width="+width+" height="+height);
      }
     
    Image image = bufferedImage.getScaledInstance(width, height,
        Image.SCALE_DEFAULT);
    BufferedImage outputImage = new BufferedImage(width, height,
        BufferedImage.TYPE_INT_RGB);
    Graphics graphics = outputImage.getGraphics();
    graphics.drawImage(image, 0, 0, null);
    graphics.dispose();
    ImageIO.write(outputImage, format, new File(destinationPath));
    } catch (Exception e) {
      System.out.println("scaleImageWithParams方法壓縮圖片時出錯了");
      e.printStackTrace();
    }
     
     
  }
 
  /**
   * 將double類型的數據轉換為int,四舍五入原則
   *
   * @param sourceDouble
   * @return
   */
  private static int parseDoubleToInt(double sourceDouble) {
    int result = 0;
    result = (int) sourceDouble;
    return result;
  }
   
  /***
   *
   * @param bufferedImage 要縮放的圖片對象
   * @param width_scale 要縮放到的寬度
   * @param height_scale 要縮放到的高度
   * @return 一個集合,第一個元素為寬度,第二個元素為高度
   */
  private static ArrayList<Integer> getAutoWidthAndHeight(BufferedImage bufferedImage,int width_scale,int height_scale){
    ArrayList<Integer> arrayList = new ArrayList<Integer>();
    int width = bufferedImage.getWidth();
    int height = bufferedImage.getHeight();
    double scale_w =getDot2Decimal( width_scale,width);
     
    System.out.println("getAutoWidthAndHeight width="+width + "scale_w="+scale_w);
    double scale_h = getDot2Decimal(height_scale,height);
    if (scale_w<scale_h) {
      arrayList.add(parseDoubleToInt(scale_w*width));
      arrayList.add(parseDoubleToInt(scale_w*height));
    }
    else {
      arrayList.add(parseDoubleToInt(scale_h*width));
      arrayList.add(parseDoubleToInt(scale_h*height));
    }
    return arrayList;
     
  }
   
   
  /***
   * 返回兩個數a/b的小數點后三位的表示
   * @param a
   * @param b
   * @return
   */
  public static double getDot2Decimal(int a,int b){
     
    BigDecimal bigDecimal_1 = new BigDecimal(a);
    BigDecimal bigDecimal_2 = new BigDecimal(b);
    BigDecimal bigDecimal_result = bigDecimal_1.divide(bigDecimal_2,new MathContext(4));
    Double double1 = new Double(bigDecimal_result.toString());
    System.out.println("相除后的double為:"+double1);
    return double1;
  }
 
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 垫底辣妹免费观看完整版 | 91香蕉依人综合久久 | 亚州一区二区 | 504神宫寺奈绪大战黑人 | 亚洲网站在线播放 | 强迫高h | 亚裔aⅴ艳星katsuni | 国产成人啪精品午夜在线观看 | 国产精彩视频 | 91se精品免费观看 | daring国家队在线观看樱花动漫 | jizz中国jizz老师水多 | 久久亚洲精品AV成人无码 | 91精品免费观看老司机 | 国产成人夜色91 | 国产欧美日韩不卡 | 午夜视频一区二区三区 | 国产在线欧美精品 | 国产日韩欧美综合在线 | 精品无人区麻豆乱码1区2 | 国产另类视频一区二区三区 | 亚洲色图2 | 波多野结衣教师未删减版 | 亚洲视频免费在线看 | 调教全程肉动画片在线观看 | 好姑娘在线完整版视频 | 香蕉久久久| 日韩有码 | 91精品国产麻豆国产自产在线 | 日韩一品在线播放视频一品免费 | 狠狠五月天中文字幕 | 2021国产麻豆剧传媒剧情最新 | 久久精品99国产精品日本 | 久久re亚洲在线视频 | 麻豆天美精东果冻传媒在线 | 成成人看片在线 | 羞羞漫画免费漫画页面在线看漫画秋蝉 | 日韩欧美国内 | 国产伦码精品一区二区 | 欧美性xxx狂流白浆 欧美性f | 国产午夜亚洲精品 |