Java压缩图片工具类

 1 import java.awt.Image;
 2 import java.awt.image.BufferedImage;
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 
 7 import javax.imageio.ImageIO;
 8 
 9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11 
12 import com.sun.image.codec.jpeg.JPEGCodec;
13 import com.sun.image.codec.jpeg.JPEGImageEncoder;
14 public class CompressPicUtils {
15 private static final Logger logger = LoggerFactory.getLogger(CompressPicUtils.class);
16 private File inputFile; // 文件对象
17 private File outputFile; // 输出图路径
18 private int outputWidth; // 默认输出图片宽
19 private int outputHeight; // 默认输出图片高
20 private boolean proportion = true; // 是否等比缩放标记(默认为等比缩放)
21 public CompressPicUtils() {
22 }
23 public boolean compressPic() {
24 try {
25 // 获得源文件
26 if (!inputFile.exists()) {
27 return false;
28 }
29 Image img = ImageIO.read(inputFile);
30 // 判断图片格式是否正确
31 if (img.getWidth(null) == -1) {
32 return false;
33 } else {
34 int newWidth;
35 int newHeight;
36 // 判断是否是等比缩放
37 if (this.proportion == true) {
38 // 为等比缩放计算输出的图片宽度及高度
39 double rate1 = ((double) img.getWidth(null)) / (double) outputWidth + 0.1;
40 double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0.1;
41 // 根据缩放比率大的进行缩放控制
42 double rate = rate1 > rate2 ? rate1 : rate2;
43 newWidth = (int) (img.getWidth(null) / rate);
44 newHeight = (int) (img.getHeight(null) / rate);
45 } else {
46 newWidth = outputWidth; // 输出的图片宽度
47 newHeight = outputHeight; // 输出的图片高度
48 }
49 BufferedImage tag = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
50 tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
51 FileOutputStream out = new FileOutputStream(outputFile);
52 // JPEGImageEncoder可适用于其他图片类型的转换
53 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
54 encoder.encode(tag);
55 out.close();
56 }
57 } catch (IOException ex) {
58 logger.error("compressPic error", ex);
59 return false;
60 }
61 return true;
62 }
63 public boolean compressPic(File inputFile, File outputFile, int width, int height, boolean gp) {
64 // 输入图路径
65 this.inputFile = inputFile;
66 // 输出图路径
67 this.outputFile = outputFile;
68 // 设置图片长宽
69 this.outputWidth = width;
70 this.outputHeight = height;
71 // 是否是等比缩放 标记
72 this.proportion = gp;
73 return compressPic();
74 }
75 }
posted @ 2012-12-03 17:23  悟寰轩-叶秋  阅读(1513)  评论(0编辑  收藏  举报