개발자의 끄적끄적

[java/spring] 이미지 리사이즈 예제 [펌] 본문

개발/java & jsp

[java/spring] 이미지 리사이즈 예제 [펌]

효벨 2020. 8. 15. 01:00
728x90
반응형

[java/spring] 이미지 리사이즈 예제 [펌] 

 

자바 이미지 리사이즈

 

프로필 이미지를 크롭하여 서버에 전달하는데.. 이미지가 너무 고해상도라 이미지를 잘라도 파일 용량이 커 이미지를 로드하는 시간이 길었다.

원인을 해결하기 위해 서버에서 이미지를 줄여서 로드하는 걸로 했다. 잘 됬는데 톰캣8에서는 POST로 데이터를 보내는데 크기가 제한이 되어있어 안되는 경우도 있었다. 그래서 안드로이드에서 이미지를 줄이는 것으로 변경.. 그리고 서버에서도 안드로이드에서 리사이즈했지만 그래도 크기가 큰 것같으면 다시 리사이즈 하는걸로 일단 코드를 작성했다.

2가지 방법으로 각각 서버 또는 안드로이드에 적용했다. 어떤 거는 안드로이드에서 안되더라..

일단 두개를 다 코드 올린다.

 

샘플코드 1

package test11;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class Test {
    private static final int IMG_WIDTH = 300;
    private static final int IMG_HEIGHT = 300;

    public static void main(String[] args) {
        try {
            String imgOriginalPath = "C:\\Users\\z\\Desktop\\imagetest\\TEST\\1.jpg"; // 원본 이미지 파일명
            String imgTargetPath = "C:\\Users\\z\\Desktop\\imagetest\\TEST\\testimage.png"; // 새 이미지 파일명

            File originFile = new File(imgOriginalPath);
            System.out.println("originFile Length : " + originFile.length());

            BufferedImage originalImage = ImageIO.read(new File(imgOriginalPath));
            int type = originalImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
            System.out.println("originFile Height : " + originalImage.getHeight());
            System.out.println("originFile Width : " + originalImage.getWidth());

            BufferedImage resizeImagePng = resizeImage(originalImage, type);
            ImageIO.write(resizeImagePng, "png", originFile);
            BufferedImage resigeImage = ImageIO.read(originFile);

            System.out.println("===========================================================");
            File resizeFile = new File(imgOriginalPath);
            System.out.println("resizeFile Length : " + resizeFile.length());

            System.out.println("resizeFile Height : " + resigeImage.getHeight());
            System.out.println("resizeFile Width : " + resigeImage.getWidth());

        } catch (Exception e){
            e.printStackTrace();
        }
    }

     private static BufferedImage resizeImage(BufferedImage originalImage, int type){
        BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
        Graphics2D g = resizedImage.createGraphics();
        g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
        g.dispose();

        return resizedImage;
    }

}

 

샘플코드2

package test11;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class TEST2 {

    public static void main(String[] args) {

        String imgOriginalPath= "C:\\Users\\z\\Desktop\\imagetest\\TEST\\1.jpg";           // 원본 이미지 파일명
        String imgTargetPath= "C:\\Users\\z\\Desktop\\imagetest\\TEST\\2.jpg";    // 새 이미지 파일명
        String imgFormat = "png";
        int newWidth = 600;
        int newHeight = 600;

        Image image;
        int imageWidth;
        int imageHeight;

        try{
            // 원본 이미지 가져오기
            image = ImageIO.read(new File(imgOriginalPath));

            // 원본 이미지 사이즈 가져오기
            imageWidth = image.getWidth(null);
            imageHeight = image.getHeight(null);

            System.out.println("imageWidth : " + imageWidth);
            System.out.println("imageHeight : " + imageHeight);


            // 이미지 리사이즈
            // Image.SCALE_DEFAULT : 기본 이미지 스케일링 알고리즘 사용
            // Image.SCALE_FAST    : 이미지 부드러움보다 속도 우선
            // Image.SCALE_REPLICATE : ReplicateScaleFilter 클래스로 구체화 된 이미지 크기 조절 알고리즘
            // Image.SCALE_SMOOTH  : 속도보다 이미지 부드러움을 우선
            // Image.SCALE_AREA_AVERAGING  : 평균 알고리즘 사용
            Image resizeImage = image.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
            System.out.println("reimageWidth : " + resizeImage.getWidth(null));
            System.out.println("reimageHeight : " + resizeImage.getHeight(null));
            // 새 이미지  저장하기
            BufferedImage newImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
            Graphics g = newImage.getGraphics();
            g.drawImage(resizeImage, 0, 0, null);
            g.dispose();
            ImageIO.write(newImage, imgFormat, new File(imgTargetPath));

        }catch (Exception e){

            e.printStackTrace();

        }
    }
}

출처: https://ktko.tistory.com/entry/자바-이미지-리사이즈 [KTKO 개발 블로그와 여행 일기]

반응형
Comments