프로그램/Java

[Java] 이미지 파일 크기 조정 및 생성하기

neorc 2025. 3. 14. 16:15
웹사이트나 모바일 앱에서 이미지 크기 조정은 매우 중요한 작업입니다. 특히 SEO(검색 엔진 최적화)를 고려할 때, 적절한 이미지 크기와 압축은 페이지 로딩 속도를 개선하고 검색 엔진 순위를 높이는 데 도움이 됩니다. Java에서는 BufferedImage와 Graphics2D를 활용하여 이미지 크기 조정 및 파일 생성이 가능합니다. 📷✨
이 글에서는 Java를 사용하여 이미지 크기를 조정하는 방법을 자세히 설명하겠습니다!

이미지 크기 조정 및 저장하기

Java에서는 BufferedImage를 활용하여 이미지 크기를 조정한 후, 파일로 저장할 수 있습니다.

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class ResizeImage {
    public static void main(String[] args) {
        try {
            // 원본 이미지 불러오기
            File inputFile = new File("input.jpg");
            BufferedImage inputImage = ImageIO.read(inputFile);
            
            // 새로운 크기 지정
            int newWidth = 500;
            int newHeight = 300;
            
            // 새로운 이미지 생성
            BufferedImage outputImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D g2d = outputImage.createGraphics();
            g2d.drawImage(inputImage.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
            g2d.dispose();
            
            // 새로운 파일로 저장
            File outputFile = new File("resized_image.jpg");
            ImageIO.write(outputImage, "jpg", outputFile);
            
            System.out.println("이미지 크기 조정 완료: " + outputFile.getAbsolutePath());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ImageIO.read() → 기존 이미지 파일을 읽어옵니다.

BufferedImage → 새 이미지 크기를 지정하여 생성합니다.

Graphics2D → 원본 이미지를 부드럽게(SMOOTH) 크기 조정하여 저장합니다.

ImageIO.write() → 변환된 이미지를 파일로 저장합니다.


비율 유지하며 크기 조정하기

이미지의 가로세로 비율을 유지하면서 크기를 조정하려면, 비율을 계산하여 적용해야 합니다.

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class ResizeImageWithAspectRatio {
    public static void main(String[] args) {
        try {
            File inputFile = new File("input.jpg");
            BufferedImage inputImage = ImageIO.read(inputFile);
            
            int originalWidth = inputImage.getWidth();
            int originalHeight = inputImage.getHeight();
            int targetWidth = 600;
            int targetHeight = (originalHeight * targetWidth) / originalWidth;
            
            BufferedImage outputImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D g2d = outputImage.createGraphics();
            g2d.drawImage(inputImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_SMOOTH), 0, 0, null);
            g2d.dispose();
            
            File outputFile = new File("resized_image_aspect_ratio.jpg");
            ImageIO.write(outputImage, "jpg", outputFile);
            
            System.out.println("비율 유지 크기 조정 완료: " + outputFile.getAbsolutePath());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

✔ 원본 이미지의 가로 대비 세로 비율을 계산하여 자동 조정합니다.

targetHeight = (originalHeight * targetWidth) / originalWidth; → 비율 유지 계산식입니다.


PNG, JPG, GIF 등 다양한 포맷 변환하기

Java에서는 ImageIO.write()를 사용하여 PNG, JPG, GIF 등 다양한 이미지 포맷으로 저장할 수 있습니다.

File outputFile = new File("output.png");
ImageIO.write(outputImage, "png", outputFile);

✔ 확장자만 변경하면 PNG, JPG, GIF 포맷으로 손쉽게 변환할 수 있습니다.



이미지 압축하여 파일 크기 줄이기

이미지의 품질을 유지하면서 파일 크기를 줄이려면 JPEG 압축률을 조절하는 것이 중요합니다. 아래는 Java에서 ImageWriteParam을 활용한 이미지 압축 코드입니다.

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import java.util.Iterator;

public class CompressImage {
    public static void main(String[] args) {
        try {
            File inputFile = new File("input.jpg");
            BufferedImage image = ImageIO.read(inputFile);
            
            File compressedFile = new File("compressed_image.jpg");
            FileOutputStream fos = new FileOutputStream(compressedFile);
            
            Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
            ImageWriter writer = writers.next();
            ImageOutputStream ios = ImageIO.createImageOutputStream(fos);
            writer.setOutput(ios);
            
            ImageWriteParam param = writer.getDefaultWriteParam();
            param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
            param.setCompressionQuality(0.7f); // 0.0(최대압축) ~ 1.0(최고품질)
            
            writer.write(null, new javax.imageio.IIOImage(image, null, null), param);
            
            ios.close();
            fos.close();
            writer.dispose();
            
            System.out.println("이미지 압축 완료: " + compressedFile.getAbsolutePath());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

setCompressionQuality(0.7f); → 70% 품질 유지하며 파일 크기 감소
ImageWriteParam을 활용하여 JPEG 압축률 조정
✔ 원본 품질을 유지하면서도 파일 크기를 줄일 수 있음


이미지 최적화

1️⃣ 파일 크기 압축하기 → WebP 또는 JPEG 압축률을 조절하여 용량을 줄일 수 있습니다.

2️⃣ 올바른 파일명 사용java-resize-image.jpg처럼 SEO-friendly 파일명을 사용하세요.

3️⃣ ALT 태그 추가하기 → 웹에서 사용 시 <img alt="Java 이미지 크기 조정 예제">를 추가하세요.

4️⃣ CDN 활용 → 이미지 로딩 속도를 높이기 위해 Cloudflare, AWS S3 등을 사용할 수 있습니다.


결론 (Conclusion)

Java에서 이미지 크기 조정 및 생성하는 방법을 정리하면 다음과 같습니다.

BufferedImage를 사용하여 이미지 크기를 조정합니다.

Graphics2D를 이용해 고품질로 리사이징합니다.

✔ 비율을 유지한 크기 조정도 가능합니다.

✔ 다양한 포맷(PNG, JPG, GIF)으로 변환하여 저장할 수 있습니다.

✔ 최적화를 위해 파일명, ALT 태그, 압축 등을 고려합니다.