사진 필터 애플리케이션은 사용자가 촬영한 사진에 다양한 시각적 효과를 적용할 수 있는 프로그램입니다. 이 애플리케이션은 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)
실행 방법
- Java 개발 환경을 설치합니다.
- 위의 코드를 Java 파일로 저장합니다.
- 컴파일 후 실행합니다.
컴파일
javac -encoding UTF-8 PhotoFilterApp.java
실행
java PhotoFilterApp
'자바(java)' 카테고리의 다른 글
스마트 홈 컨트롤러: 가전 제품 및 조명을 제어하는 스마트 홈 컨트롤 앱을 제작합니다. (0) | 2023.12.20 |
---|---|
사진 필터 앱: 카메라로 촬영한 사진에 다양한 필터를 적용하는 어플리케이션을 만듭니다. (0) | 2023.12.20 |
오목 게임: 오목 보드 게임을 구현하고 두 플레이어가 대결할 수 있게 합니다. (0) | 2023.12.20 |
환율 변환기: 다른 통화로 환율을 변환하는 도구를 제작합니다. (1) | 2023.12.20 |
2명이서 실시간 채팅 앱: 사용자 간에 실시간 메시지를 교환할 수 있는 채팅 애플리케이션을 개발합니다. (1) | 2023.12.20 |