java實現圖片裁剪縮放工具類

jopen 10年前發布 | 27K 次閱讀 圖形/圖像處理 Java

import java.awt.Image;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

public class ImageHelper {
/*

 * 根據尺寸圖片居中裁剪 
 */  
 public static void cutCenterImage(String src,String dest,int w,int h) throws IOException{   
     Iterator iterator = ImageIO.getImageReadersByFormatName("jpg");   
     ImageReader reader = (ImageReader)iterator.next();   
     InputStream in=new FileInputStream(src);  
     ImageInputStream iis = ImageIO.createImageInputStream(in);   
     reader.setInput(iis, true);   
     ImageReadParam param = reader.getDefaultReadParam();   
     int imageIndex = 0;   
     Rectangle rect = new Rectangle((reader.getWidth(imageIndex)-w)/2, (reader.getHeight(imageIndex)-h)/2, w, h);    
     param.setSourceRegion(rect);   
     BufferedImage bi = reader.read(0,param);     
     ImageIO.write(bi, "jpg", new File(dest));             

 }  
/* 
 * 圖片裁剪二分之一 
 */  
 public static void cutHalfImage(String src,String dest) throws IOException{   
     Iterator iterator = ImageIO.getImageReadersByFormatName("jpg");   
     ImageReader reader = (ImageReader)iterator.next();   
     InputStream in=new FileInputStream(src);  
     ImageInputStream iis = ImageIO.createImageInputStream(in);   
     reader.setInput(iis, true);   
     ImageReadParam param = reader.getDefaultReadParam();   
     int imageIndex = 0;   
     int width = reader.getWidth(imageIndex)/2;   
     int height = reader.getHeight(imageIndex)/2;   
     Rectangle rect = new Rectangle(width/2, height/2, width, height);   
     param.setSourceRegion(rect);   
     BufferedImage bi = reader.read(0,param);     
     ImageIO.write(bi, "jpg", new File(dest));     
 }  
/* 
 * 圖片裁剪通用接口 
 */  

public static void cutImage(String src,String dest,int x,int y,int w,int h) throws IOException{   
       Iterator iterator = ImageIO.getImageReadersByFormatName("jpg");   
       ImageReader reader = (ImageReader)iterator.next();   
       InputStream in=new FileInputStream(src);  
       ImageInputStream iis = ImageIO.createImageInputStream(in);   
       reader.setInput(iis, true);   
       ImageReadParam param = reader.getDefaultReadParam();   
       Rectangle rect = new Rectangle(x, y, w,h);    
       param.setSourceRegion(rect);   
       BufferedImage bi = reader.read(0,param);     
       ImageIO.write(bi, "jpg", new File(dest));             

}   
/* 
 * 圖片縮放 
 */  
public static void zoomImage(String src,String dest,int w,int h) throws Exception {  
    double wr=0,hr=0;  
    File srcFile = new File(src);  
    File destFile = new File(dest);  
    BufferedImage bufImg = ImageIO.read(srcFile);  
    Image Itemp = bufImg.getScaledInstance(w, h, bufImg.SCALE_SMOOTH);  
    wr=w*1.0/bufImg.getWidth();  
    hr=h*1.0 / bufImg.getHeight();  
    AffineTransformOp ato = new AffineTransformOp(AffineTransform.getScaleInstance(wr, hr), null);  
    Itemp = ato.filter(bufImg, null);  
    try {  
        ImageIO.write((BufferedImage) Itemp,dest.substring(dest.lastIndexOf(".")+1), destFile);  
    } catch (Exception ex) {  
        ex.printStackTrace();  
    }  

}  

} </pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!