package net.loyin.util.image; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import net.loyin.util.exception.ImageRuntimeException; import com.sun.image.codec.jpeg.ImageFormatException; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * 使用javax image io生成缩略图 * @author kingapex * 2010-7-10下午11:43:05 */ public class JavaImageIOCreator{ private String srcFile; private String destFile; private int width; private int height; private Image img; public JavaImageIOCreator(String sourcefile, String targetFile) { File _file = new File(sourcefile); // 读入文件 this.srcFile = _file.getName(); this.destFile = targetFile; try { img = javax.imageio.ImageIO.read(_file); } catch (IOException e) { e.printStackTrace(); } // 构造Image对象 width = img.getWidth(null); // 得到源图宽 height = img.getHeight(null); // 得到源图长 } public void resize(int w, int h) { int target_w, target_h; // 目标宽高 int x = 0, y = 0; // 缩略图在背景的座标 x = y = 0; target_w = w; target_h = h; /* 计算目标宽高 */ if (width / height > w / h) { // 原图长:上下补白 target_w = w; target_h = (int) (target_w * height / width); x = 0; y = (int) (h - target_h) / 2; } if (width / height < w / h) { // 原图高:左右补白 target_h = h; target_w = (int) (target_h * width / height) ; y = 0; x = (int) (w - target_w) / 2; } BufferedImage _image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics graphics = _image.getGraphics(); graphics.setColor(Color.white); graphics.fillRect(0, 0, _image.getWidth(), _image.getHeight()); graphics.drawImage(img, x, y,target_w, target_h, null); // 绘制缩小后的图 FileOutputStream out; try { out = new FileOutputStream(destFile); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(_image); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); throw new ImageRuntimeException(srcFile, "生成缩略图"); } // 输出到文件流 catch (ImageFormatException e) { e.printStackTrace(); throw new ImageRuntimeException(srcFile, "生成缩略图"); } catch (IOException e) { e.printStackTrace(); throw new ImageRuntimeException(srcFile, "生成缩略图"); } } public static void main(String args[]){ JavaImageIOCreator creator = new JavaImageIOCreator("E:/1.jpg", "E:/2.jpg"); creator.resize(200, 200); } }