Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)로 이미지에 워터마크 만드는 방법 – BufferedImage와 Graphics 활용 예제

이미지에 워터마크를 삽입하면 사진의 무단 사용을 막고 저작권을 보호하거나 브랜드를 알리는 데 큰 도움이 됩니다. 이 글에서는 자바의 BufferedImageGraphics 클래스를 활용해 주어진 이미지 위에 "Hello"라는 워터마크를 그리고, 결과물을 새 파일로 저장하는 방법을 단계별로 살펴봅니다.

워터마크 구현 순서

1. 원본 이미지 불러오기

ImageIO.read() 메서드를 사용해 디스크에 있는 이미지 파일을 읽어 BufferedImage 객체로 변환합니다.

2. 출력용 빈 이미지 생성

원본과 같은 크기의 새로운 BufferedImage를 만들어 워터마크가 적용된 결과를 담을 공간을 준비합니다.

3. Graphics 객체 얻기

getGraphics()로 그래픽 객체를 가져온 뒤, drawImage()를 호출해 원본 이미지를 새 이미지 위에 그립니다.

4. 폰트와 색상 지정

Font 객체로 글꼴·스타일·크기를 정하고, setColor()에 RGBA 값을 넣어 반투명한 색상의 워터마크를 만듭니다.

5. 워터마크 그리기 및 저장

drawString()으로 원하는 위치에 텍스트를 그린 후, ImageIO.write()를 이용해 결과 이미지를 JPG 파일로 저장합니다.

전체 예제 코드

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class WaterMarkExample {
    public static void main(String[] args) throws IOException {
        // 이미지 파일 읽기
        File file = new File("D:\\Images\\test1.jpg");
        BufferedImage img = ImageIO.read(file);

        // 출력용 빈 이미지 생성
        int height = img.getHeight();
        int width = img.getWidth();
        BufferedImage res = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        // Graphics 객체 생성 후 원본 이미지 그리기
        Graphics graphics = res.getGraphics();
        graphics.drawImage(img, 0, 0, null);

        // 워터마크에 사용할 폰트 설정
        Font font = new Font("Arial", Font.PLAIN, 45);
        graphics.setFont(font);
        graphics.setColor(new Color(255, 150, 200, 30));

        // 이미지 위에 워터마크 텍스트 그리기
        graphics.drawString("Hello", width / 7, height / 5);

        // 그래픽 리소스 해제
        graphics.dispose();

        // 결과 이미지 저장
        file = new File("D:\\Images\\watermark.jpg");
        ImageIO.write(res, "jpg", file);
    }
}

실행 결과 확인

입력 이미지

자바(Java)로 이미지에 워터마크 만드는 방법 – BufferedImage와 Graphics 활용 예제

출력 이미지

자바(Java)로 이미지에 워터마크 만드는 방법 – BufferedImage와 Graphics 활용 예제

마무리 및 활용 팁

위 예제처럼 Graphics의 좌표 값(width/7, height/5)을 조절하면 워터마크의 위치를 자유롭게 변경할 수 있습니다. 또한 setColor()의 마지막 알파 값(투명도)을 높이면 워터마크를 더 진하게, 낮추면 더 은은하게 표현할 수 있습니다. 여러 위치에 반복해서 텍스트를 그리면 타일 형태의 워터마크도 손쉽게 구현할 수 있으니, 실제 서비스에서는 이미지 크기에 비례해 폰트 크기를 계산하는 방식도 함께 고려해 보시기 바랍니다.