상세 컨텐츠

본문 제목

자바 이미지 사이즈 비율 변경 (java image resize)

프로그램 언어/Java

by husks 2018. 1. 16. 14:30

본문

반응형


자바를 이용해 이미지의 사이즈를 조절 하는 예제 입니다.

인터넷에 있는 예제를 3가지 정도 사용해 보았는데 제일 화질이 좋은 방식으로 정리해 봅니다.

설정한 넓이와 높이로 맞출 수 있고 비율로 줄일 수 있습니다. (화질과 속도도 가능, 썸네일 생성할 경우는 화질보단 속도 우선으로)

아래는 이미지 변경한 결과물 입니다.


[비율] 넓이 기준 (넓이 600)


[비율] 높이 기준 (높이 700)


[비율무시] 넓이, 높이 직접 설정 (600*700)


[속도우선] 저화질 (개털됌 ㅋㅋ)

아래는 예제 입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
 
import javax.imageio.ImageIO;
 
public class ImageResize {
 
    public static void main(String[] args) {
 
        String imgOriginalPath= "C:/test/test.jpg";           // 원본 이미지 파일명
        String imgTargetPath= "C:/test/test_resize.jpg";    // 새 이미지 파일명
        String imgFormat = "jpg";                             // 새 이미지 포맷. jpg, gif 등
        int newWidth = 600;                                  // 변경 할 넓이
        int newHeight = 700;                                 // 변경 할 높이
        String mainPosition = "W";                             // W:넓이중심, H:높이중심, X:설정한 수치로(비율무시)
 
        Image image;
        int imageWidth;
        int imageHeight;
        double ratio;
        int w;
        int h;
 
        try{
            // 원본 이미지 가져오기
            image = ImageIO.read(new File(imgOriginalPath));
 
            // 원본 이미지 사이즈 가져오기
            imageWidth = image.getWidth(null);
            imageHeight = image.getHeight(null);
 
            if(mainPosition.equals("W")){    // 넓이기준
 
                ratio = (double)newWidth/(double)imageWidth;
                w = (int)(imageWidth * ratio);
                h = (int)(imageHeight * ratio);
 
            }else if(mainPosition.equals("H")){ // 높이기준
 
                ratio = (double)newHeight/(double)imageHeight;
                w = (int)(imageWidth * ratio);
                h = (int)(imageHeight * ratio);
 
            }else//설정값 (비율무시)
 
                w = newWidth;
                h = newHeight;
            }
 
            // 이미지 리사이즈
            // Image.SCALE_DEFAULT : 기본 이미지 스케일링 알고리즘 사용
            // Image.SCALE_FAST    : 이미지 부드러움보다 속도 우선
            // Image.SCALE_REPLICATE : ReplicateScaleFilter 클래스로 구체화 된 이미지 크기 조절 알고리즘
            // Image.SCALE_SMOOTH  : 속도보다 이미지 부드러움을 우선
            // Image.SCALE_AREA_AVERAGING  : 평균 알고리즘 사용
            Image resizeImage = image.getScaledInstance(w, h, Image.SCALE_SMOOTH);
 
            // 새 이미지  저장하기
            BufferedImage newImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
            Graphics g = newImage.getGraphics();
            g.drawImage(resizeImage, 00null);
            g.dispose();
            ImageIO.write(newImage, imgFormat, new File(imgTargetPath));
 
        }catch (Exception e){
 
            e.printStackTrace();
 
        }
 
    }
 
}


반응형

관련글 더보기

댓글 영역