2014年6月24日 星期二

【Java】圖像裁切

呼叫 ImageExpert 的 cropImage method 傳入圖片的所在路徑,以及要裁切位置的 x 與 y 軸,和要裁切的長度與高度

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
public class ImageExpert {
 public static void cropImage(String location, String x, String y, String h, String w){
  try {
   BufferedImage img = ImageIO.read(new File(location));
   Dimension size = new Dimension(Integer.valueOf(w), Integer.valueOf(h));
   Rectangle clip = null;
   if ((size.width + Integer.valueOf(x)) <= img.getWidth()
     && (size.height + Integer.valueOf(y)) <= img.getHeight()) {
     clip = new Rectangle(size);
   } else {
    if ((size.width + Integer.valueOf(x)) > img.getWidth()){
     size.width = img.getWidth() - Integer.valueOf(x);
    }
    if ((size.height + Integer.valueOf(y)) > img.getHeight()){
     size.height = img.getHeight() - Integer.valueOf(y);
    }
    clip = new Rectangle(size);
   }
   clip.x = Integer.valueOf(x);
   clip.y = Integer.valueOf(y);
   BufferedImage clipped = img.getSubimage(clip.x, clip.y, clip.height, clip.width);
   File outputfile = new File(location);
   ImageIO.write(clipped, getImageType(location), outputfile);
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 private static String getImageType(String locationOrName){
  return locationOrName.substring((locationOrName.lastIndexOf(".")+1));
 }
}

沒有留言:

張貼留言