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

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

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;
  }
 
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品久久久久69影院 | 欧美大屁屁 | 91麻豆精东果冻天美传媒老狼 | 蜜桃成人影院 | 欧美大美bbb和大白屁股 | 催眠白丝舞蹈老师小说 | 国产毛片在线高清视频 | 超兴奋朋友的中文字幕下 | 18无删减羞羞网站动漫 | 日日摸日日碰夜夜爽97纠 | 免费看3d小舞被躁视频网站 | 国产91免费在线 | 亚洲风情无码免费视频 | 北条麻妃黑人 | 香蕉国产人午夜视频在线观看 | 男女姓交大视频免费观看 | 四虎永久网址影院 | 久久国产精品无码视欧美 | 超级碰在线视频 | 99热精品在线免费观看 | 日韩欧美亚洲一区精选 | 99er在线视频| 92国产福利视频一区二区 | 四虎影院精品在线观看 | 久久国产乱子伦免费精品 | 91视频破解版 | 激情影院网站 | 543精品视频 | 胸奶好大好紧好湿好爽 | 四虎最新永久在线精品免费 | 天天做天天爱天天爽综合区 | 波多野结衣52部合集在线观看 | 天天舔天天干天天操 | 青青青草免费 | 欧美在线一| 午夜电影三级还珠格格 | 草莓茄子丝瓜番茄小蝌蚪 | 免费观看在线aa | 手机亚洲第一页 | 欧美日韩国产一区二区三区欧 | 3d动漫美女被吸乳羞羞视频 |