将图片横切或者竖切为两张
public void carveImage(String dir, File file, String orient, int width, int height) {
ImageFilter cropFilter;
Image img;
try {
// 读取源图像
BufferedImage bi = ImageIO.read(file);
int srcWidth = bi.getWidth(); // 源图宽度
int srcHeight = bi.getHeight(); // 源图高度
int destWidth, destHeight;
int j = 1, k = 1;
// 判断
if ("2".equals(orient)) {// 竖切
destWidth = srcWidth / 2;
destHeight = srcHeight;
k = 0;
} else if ("1".equals(orient)) {// 横切
destWidth = srcWidth;
destHeight = srcHeight / 2;
j = 0;
} else {
return;
}
String fileName;
String filePath;
if (srcWidth >= destWidth && srcHeight >= destHeight) {
Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);
for (int i = 0; i < 2; i++) {
fileName = System.currentTimeMillis() + ".jpg";
filePath = dir + "/" + fileName;
cropFilter = new CropImageFilter(i * destWidth * j, i * destHeight * k, destWidth, destHeight);
img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));
BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
new CropThread(g, img).start();
ImageIO.write(tag, "JPEG", new File(filePath));
}
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
class CropThread extends Thread {
Graphics g = null;
Image img = null;
public CropThread(Graphics g, Image img) {
this.g = g;
this.img = img;
}
public void run() {
g.drawImage(img, 0, 0, null); // 绘制缩小后的图
g.dispose();
}
}