사진 필터 애플리케이션은 사용자가 카메라로 촬영한 사진에 다양한 시각적 효과를 적용할 수 있도록 해주는 프로그램입니다. 이 애플리케이션을 자바로 구현하기 위해 Java Swing을 사용한 GUI 기반의 애플리케이션을 만들고, 자바의 BufferedImage 클래스를 활용하여 이미지에 필터를 적용할 수 있습니다.
1. 내용 설명
사진 필터 앱은 사용자가 이미지 파일을 열고, 선택한 필터(예: 흑백, 세피아, 밝기 조절 등)를 적용하여 수정된 이미지를 볼 수 있게 해줍니다. 사용자는 원하는 필터를 적용한 후 결과 이미지를 저장할 수도 있습니다.
2. 프로그램간 사용 함수 설명
- openImage(): 사용자가 이미지 파일을 열 수 있도록 합니다.
- applyFilter(BufferedImage image, String filterType): 선택한 필터 타입에 따라 이미지에 필터를 적용합니다.
- saveImage(BufferedImage image, String path): 수정된 이미지를 지정된 경로에 저장합니다.
- createUI(): 사용자 인터페이스를 생성하고 이벤트 리스너를 설정합니다.
3. 코딩 내용
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.awt.image.RescaleOp;
import javax.imageio.ImageIO;
import java.io.*;
public class PhotoFilterApp2 extends JFrame {
private BufferedImage originalImage;
private BufferedImage filteredImage;
private JLabel imageLabel;
public PhotoFilterApp2() {
setTitle("Photo Filter App");
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
imageLabel = new JLabel();
JScrollPane scrollPane = new JScrollPane(imageLabel);
add(scrollPane, BorderLayout.CENTER);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("File");
JMenuItem openItem = new JMenuItem("Open");
JMenuItem saveItem = new JMenuItem("Save");
fileMenu.add(openItem);
fileMenu.add(saveItem);
menuBar.add(fileMenu);
JMenu filterMenu = new JMenu("Filters");
JMenuItem grayscaleItem = new JMenuItem("Grayscale");
JMenuItem sepiaItem = new JMenuItem("Sepia");
filterMenu.add(grayscaleItem);
filterMenu.add(sepiaItem);
menuBar.add(filterMenu);
openItem.addActionListener(e -> openImage());
saveItem.addActionListener(e -> saveImage());
grayscaleItem.addActionListener(e -> applyFilter("grayscale"));
sepiaItem.addActionListener(e -> applyFilter("sepia"));
}
private void openImage() {
JFileChooser fileChooser = new JFileChooser();
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
try {
File file = fileChooser.getSelectedFile();
originalImage = ImageIO.read(file);
filteredImage = originalImage;
imageLabel.setIcon(new ImageIcon(originalImage));
pack();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void saveImage() {
if (filteredImage != null) {
JFileChooser fileChooser = new JFileChooser();
if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
try {
File file = fileChooser.getSelectedFile();
ImageIO.write(filteredImage, "png", file);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void applyFilter(String filterType) {
if (originalImage == null) return;
if (filterType.equals("grayscale")) {
filteredImage = new BufferedImage(originalImage.getWidth(),
originalImage.getHeight(),
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = filteredImage.createGraphics();
g2d.drawImage(originalImage, 0, 0, null);
g2d.dispose();
for (int i = 0; i < filteredImage.getWidth(); i++) {
for (int j = 0; j < filteredImage.getHeight(); j++) {
int p = filteredImage.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;
filteredImage.setRGB(i, j, p);
}
}
} else if (filterType.equals("sepia")) {
// 세피아 필터 적용 로직
}
imageLabel.setIcon(new ImageIcon(filteredImage));
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new PhotoFilterApp2().setVisible(true);
});
}
}
4. 전문용어
- Java: 객체 지향 프로그래밍 언어입니다.
- Swing: Java의 GUI 툴킷입니다.
- BufferedImage: 이미지 데이터를 담는 클래스입니다.
- ImageIO: 이미지 읽기/쓰기를 위한 클래스입니다.
5. 라이브러리 추가 및 실행 방법
라이브러리
- Java 표준 라이브러리 (Swing, AWT, ImageIO)
실행 방법
- Java 개발 환경을 설치합니다.
- 위의 코드를 Java 파일로 저장합니다.
- 컴파일 후 실행합니다.
컴파일
javac -encoding UTF-8 PhotoFilterApp2.java
실행
java PhotoFilterApp2
'자바(java)' 카테고리의 다른 글
노트 테이킹 앱: 메모를 작성하고 관리하는 간단한 노트 애플리케이션을 개발합니다. (0) | 2023.12.21 |
---|---|
스마트 홈 컨트롤러: 가전 제품 및 조명을 제어하는 스마트 홈 컨트롤 앱을 제작합니다. (0) | 2023.12.20 |
사진 필터 앱: 카메라로 촬영한 사진에 다양한 필터를 적용하는 어플리케이션을 만듭니다. (0) | 2023.12.20 |
오목 게임: 오목 보드 게임을 구현하고 두 플레이어가 대결할 수 있게 합니다. (0) | 2023.12.20 |
환율 변환기: 다른 통화로 환율을 변환하는 도구를 제작합니다. (1) | 2023.12.20 |