본문 바로가기

자바(java)

사진 필터 앱: 카메라로 촬영한 사진에 다양한 필터를 적용하는 어플리케이션을 만듭니다.

반응형

사진 필터 애플리케이션은 사용자가 촬영한 사진에 다양한 시각적 효과를 적용할 수 있는 프로그램입니다. 이 애플리케이션은 Java를 사용하여 구현되며, Java의 BufferedImage 클래스와 관련 라이브러리를 활용하여 이미지 처리를 수행합니다.

1. 내용 설명

사진 필터 앱은 사용자가 선택한 사진에 필터를 적용하여 다양한 시각적 변화를 제공합니다. 예를 들어, 흑백 필터, 세피아 톤, 밝기 조절, 대비 조절 등의 효과를 적용할 수 있습니다.

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

  • applyGrayscaleFilter(BufferedImage image): 이미지에 흑백 필터를 적용합니다.
  • applySepiaFilter(BufferedImage image): 이미지에 세피아 톤 필터를 적용합니다.
  • adjustBrightness(BufferedImage image, int level): 이미지의 밝기를 조절합니다.
  • adjustContrast(BufferedImage image, int level): 이미지의 대비를 조절합니다.

3. 코딩 내용

 

import javax.swing.*;
import java.awt.image.BufferedImage;
import java.awt.image.RescaleOp;
import java.awt.*;
import java.io.File;
import javax.imageio.ImageIO;
import java.io.IOException;

public class PhotoFilterApp {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Photo Filter App");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);

        // 이미지 로딩
        BufferedImage image = null;
        try {
            image = ImageIO.read(new File("zaroo.jpg")); // 이미지 경로 수정
        } catch (IOException e) {
            e.printStackTrace();
            System.exit(1);
        }

        // 필터 적용
        BufferedImage grayscaleImage = applyGrayscaleFilter(image);
        BufferedImage sepiaImage = applySepiaFilter(image);

        // 이미지 표시
        frame.setLayout(new GridLayout(1, 2));
        frame.add(new JLabel(new ImageIcon(grayscaleImage)));
        frame.add(new JLabel(new ImageIcon(sepiaImage)));

        frame.setVisible(true);
    }

    private static BufferedImage applyGrayscaleFilter(BufferedImage original) {
        BufferedImage grayscale = new BufferedImage(original.getWidth(), 
                                                    original.getHeight(), 
                                                    BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = grayscale.createGraphics();
        g2d.drawImage(original, 0, 0, null);
        g2d.dispose();

        for (int i = 0; i < grayscale.getWidth(); i++) {
            for (int j = 0; j < grayscale.getHeight(); j++) {
                int p = grayscale.getRGB(i, j);
                int a = (p >> 24) & 0xff;
                int r = (p >> 16) & 0xff;
                int g = (p >> 8) & 0xff;
                int b = p & 0xff;

                int avg = (r + g + b) / 3;

                p = (a << 24) | (avg << 16) | (avg << 8) | avg;
                grayscale.setRGB(i, j, p);
            }
        }
        return grayscale;
    }

    private static BufferedImage applySepiaFilter(BufferedImage original) {
        BufferedImage sepia = new BufferedImage(original.getWidth(), 
                                                original.getHeight(), 
                                                BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = sepia.createGraphics();
        g2d.drawImage(original, 0, 0, null);
        g2d.dispose();

        int sepiaDepth = 20;

        for (int i = 0; i < sepia.getWidth(); i++) {
            for (int j = 0; j < sepia.getHeight(); j++) {
                int p = sepia.getRGB(i, j);
                int a = (p >> 24) & 0xff;
                int r = (p >> 16) & 0xff;
                int g = (p >> 8) & 0xff;
                int b = p & 0xff;

                int gry = (r + g + b) / 3;
                r = g = b = gry;

                r = r + (sepiaDepth * 2);
                g = g + sepiaDepth;

                if (r > 255) r = 255;
                if (g > 255) g = 255;
                if (b > 255) b = 255;

                // convert to sepia
                p = (a << 24) | (r << 16) | (g << 8) | b;
                sepia.setRGB(i, j, p);
            }
        }
        return sepia;
    }
}

 

4. 전문용어

  • Java: 객체 지향 프로그래밍 언어입니다.
  • BufferedImage: 이미지 데이터를 메모리에 저장하는 클래스입니다.
  • ImageIO: 이미지 파일 입출력을 위한 클래스입니다.

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

라이브러리

  • Java 표준 라이브러리 사용 (javax.swing, java.awt.image, javax.imageio)

실행 방법

  1. Java 개발 환경을 설치합니다.
  2. 위의 코드를 Java 파일로 저장합니다.
  3. 컴파일 후 실행합니다.

컴파일

javac -encoding UTF-8 PhotoFilterApp.java

 

실행

java PhotoFilterApp

반응형