图片压缩成指定大小

不用截取图片,按指定大小截取。

 

package com.boco.vnms.common.util;

import java.awt.Color; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.awt.image.ConvolveOp; 
import java.awt.image.Kernel; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import org.apache.commons.fileupload.FileItem; 
import org.apache.log4j.Logger;     
import com.sun.image.codec.jpeg.JPEGCodec; 
import com.sun.image.codec.jpeg.JPEGImageEncoder; 

public class ImageUtil { 
    /** 
     * Logger for this class 
     */
    private static final Logger logger = Logger.getLogger(ImageUtil.class);     
    public static void imageScale(String srcFilePath, String targetFilePath, 
            int width, int height) { 
         imageScale(new File(srcFilePath), new File(targetFilePath), width, 
                height); 
    } 
    public static void imageScale(File srcFile, File targetFile, int width, int height) { 
        try { 
            Image image = javax.imageio.ImageIO.read(srcFile); 
            image = image.getScaledInstance(width, height, 
                    Image.SCALE_AREA_AVERAGING); 
            // Make a BufferedImage from the Image. 
            BufferedImage mBufferedImage = new BufferedImage(width, height, 
                    BufferedImage.TYPE_INT_RGB); 
            Graphics2D g2 = mBufferedImage.createGraphics();             
            g2.drawImage(image, 0, 0, width, height, Color.white, null); 
            g2.dispose(); 
            float[] kernelData2 = { -0.125f, -0.125f, -0.125f, -0.125f, 2, 
                    -0.125f, -0.125f, -0.125f, -0.125f }; 
            Kernel kernel = new Kernel(3, 3, kernelData2); 
           ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); 
            mBufferedImage = cOp.filter(mBufferedImage, null); 
  
           File targetDir = targetFile.getParentFile(); 
            if (!targetDir.exists()) 
                targetDir.mkdirs(); 
 
            FileOutputStream out = new FileOutputStream(targetFile); 
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
            encoder.encode(mBufferedImage); 
            out.close(); 
        } catch (Exception e) { 
           logger.error( 
                    "imageScale(String, String, int, int) - 图片压缩出错 - srcFilePath="
                            + srcFile.getPath() + ", targeFilePath="
                           + targetFile.getPath() + ", width=" + width 
                           + ", height=" + height, e); 
        } 
    } 
  
   public void imageScale(FileItem fileItem, String targetFilePath, int width, 
            int height) { 
        try { 
            InputStream input = fileItem.getInputStream(); 
            Image image = javax.imageio.ImageIO.read(input); 
  
            image = image.getScaledInstance(width, height, 
                    Image.SCALE_AREA_AVERAGING); 
            BufferedImage mBufferedImage = new BufferedImage(width, height, 
                    BufferedImage.TYPE_INT_RGB); 
            Graphics2D g2 = mBufferedImage.createGraphics(); 
  
            g2.drawImage(image, 0, 0, width, height, Color.white, null); 
            g2.dispose(); 
  
            float[] kernelData2 = { -0.125f, -0.125f, -0.125f, -0.125f, 2, 
                    -0.125f, -0.125f, -0.125f, -0.125f }; 
            Kernel kernel = new Kernel(3, 3, kernelData2); 
            ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); 
            mBufferedImage = cOp.filter(mBufferedImage, null); 
  
            File target = new File(targetFilePath); 
            File targetDir = target.getParentFile(); 
            if (!targetDir.exists()) 
                targetDir.mkdirs(); 
  
            FileOutputStream out = new FileOutputStream(targetFilePath); 
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
            encoder.encode(mBufferedImage); 
            out.close(); 
            input.close(); 
        } catch (Exception e) { 
            logger.error( 
                    "imageScale(String, String, int, int) - 图片压缩出错 - fileItem="
                           + fileItem.getName() + ", targetFilePath="
                      + targetFilePath + ", width=" + width + ", height="
                     + height, e); 
   } 
  } 

public static void main(String[] args) {
   imageScale("D:/xx.jpg", "D:/xx.jpg",200, 100);
}
}

 

 

posted @ 2011-09-23 18:07  任满  阅读(1635)  评论(0编辑  收藏  举报