본문 바로가기

자바(java)

사진 모자이크: 얼굴 또는 민감한 정보를 모자이크 처리하여 사진을 편집합니다.

반응형

아래에는 자바를 사용하여 얼굴 또는 민감한 정보를 모자이크 처리하는 간단한 사진 편집 애플리케이션의 코드와 설명을 제공합니다.

1. 내용 설명

이 프로그램은 얼굴 또는 민감한 정보가 있는 사진을 불러와 해당 부분을 모자이크 처리하여 개인 정보 보호를 위한 사진 편집을 수행합니다.

2. 프로그램 간 사용 함수 설명

  • loadImage(): 이미지를 불러오는 함수.
  • mosaicImage(): 얼굴 또는 민감한 정보 부분을 모자이크 처리하는 함수.
  • saveImage(): 모자이크 처리한 이미지를 저장하는 함수.

3. 코딩 내용

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.util.Scanner; // 추가: Scanner 클래스 임포트

public class PhotoMosaicApp {

    public static void main(String[] args) {
        try {
            BufferedImage image = loadImage("img.jpg"); // 이미지 불러오기
            BufferedImage mosaicImage = mosaicImage(image); // 모자이크 처리
            saveImage(mosaicImage, "output.jpg"); // 모자이크 처리된 이미지 저장
            System.out.println("모자이크 처리 완료");
        } catch (IOException e) {
            System.out.println("오류 발생: " + e.getMessage());
        }
    }

    private static BufferedImage loadImage(String filePath) throws IOException {
        File imageFile = new File(filePath);
        return ImageIO.read(imageFile);
    }

    private static BufferedImage mosaicImage(BufferedImage image) {
        int mosaicSize = 10; // 모자이크 크기 설정
        int width = image.getWidth();
        int height = image.getHeight();

        BufferedImage mosaicImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = mosaicImage.createGraphics();

        for (int y = 0; y < height; y += mosaicSize) {
            for (int x = 0; x < width; x += mosaicSize) {
                int startX = x;
                int startY = y;
                int endX = Math.min(x + mosaicSize, width);
                int endY = Math.min(y + mosaicSize, height);

                int averageColor = calculateAverageColor(image, startX, startY, endX, endY);

                for (int i = startX; i < endX; i++) {
                    for (int j = startY; j < endY; j++) {
                        mosaicImage.setRGB(i, j, averageColor);
                    }
                }
            }
        }

        return mosaicImage;
    }

    private static int calculateAverageColor(BufferedImage image, int startX, int startY, int endX, int endY) {
        int totalRed = 0;
        int totalGreen = 0;
        int totalBlue = 0;
        int pixelCount = 0;

        for (int x = startX; x < endX; x++) {
            for (int y = startY; y < endY; y++) {
                int color = image.getRGB(x, y);
                totalRed += (color >> 16) & 0xFF;
                totalGreen += (color >> 8) & 0xFF;
                totalBlue += color & 0xFF;
                pixelCount++;
            }
        }

        int averageRed = totalRed / pixelCount;
        int averageGreen = totalGreen / pixelCount;
        int averageBlue = totalBlue / pixelCount;

        return (averageRed << 16) | (averageGreen << 8) | averageBlue;
    }

    private static void saveImage(BufferedImage image, String filePath) throws IOException {
        File outputImageFile = new File(filePath);
        ImageIO.write(image, "jpg", outputImageFile);
    }
}

4. 전문 용어

  • 모자이크 처리: 이미지의 일부를 픽셀화하여 세부 정보를 가려 개인 정보를 보호하는 기술.

5. 라이브러리 추가 및 실행 방법

이 코드는 Java의 기본 라이브러리만 사용하므로 추가 라이브러리가 필요하지 않습니다.

실행 방법:

  1. 위의 코드를 복사하여 Java 파일로 저장합니다.
  2. 사진을 input.jpg로 지정한 경로에 저장하고, 원하는 크기의 모자이크를 설정합니다.
  3. 명령 프롬프트 또는 터미널에서 해당 디렉토리로 이동한 후 다음 명령을 실행합니다.


javac PhotoMosaicApp.java
이 명령은 Java 소스 파일을 컴파일하여 실행 가능한 바이너리 파일을 생성합니다.
다음 명령을 사용하여 애플리케이션을 실행합니다.
java PhotoMosaicApp
이제 얼굴 또는 민감한 정보를 모자이크 처리한 이미지가 생성됩니다.




반응형