JAVA에서 이미지를 가져오면 크기 변경하는 것이 간단하지가 않다.
먼저 Image랑 BufferedImage 의 차이점을 알고 있으면 좋다.
Image는 추상클래스이며 이미지를 직접 인스턴스화 할 수 없다.
BufferedImage는 자식클래스이며 인스턴스를 생성할 수 있다.
그러면 이미지의 크기를 바꾸려면 어떻게 할까?
1. 파일에서 이미지를 불러온다.
2. 이미지 사이즈를 수정해서 새로운 Image를 생성한다.
3. 수정한 이미지를 담을 BufferedImage를 생성한다.
4. 생성한 이미지에 사이즈가 수정된 이미지를 그린다.
5. 새로 생성한 이미지를 파일로 저장한다!
각 단계를 코드로 알아보자
Image ori_img = null;
BufferedImage new_img = null;
int x = 30, y = 30;
int img_x = 0, img_y = 0;
try {
ori_img = ImageIO.read(new File("img.jpg"));
Image resize_img = ori_img.getScaledInstance(x, y, Image.SCALE_SMOOTH);
new_img = new BufferedImage(x, y, BufferedImage.TYPE_INT_RGB);
Graphics g = new_img.getGraphics();
g.drawImage(resize_img, 0, 0, this);
g.dispose();
}catch (IOException e) {
System.out.println("no image");
System.exit(1);
}
ori_img가 원본이미지
new_img가 수정된 이미지 (최종이미지)
resize_img: 원본이미지의 크기를 수정한다.
g.drawImage에서 (크기가수정된 이미지, x좌표 시작지점(크기아님), y좌표 시작지점(크기아님),this)
몇가지만 기억하면 된다.
그냥 setSize()나 Resize() 이런거 만들어주지 왜 이렇게 피곤하게 하는지 모르겠다. ㅠ
그래서 가끔 이미지 써야할 때 너무 스트레스 받는당.