Java에서 이미지 크기 조정

Rupam Yadav 2023년10월12일
  1. BufferedImage.getScaledInstance()를 사용하여 Java에서 이미지 크기 조정 및 표시
  2. Graphics2DImageIO를 사용하여 이미지 크기를 조정하고 Java에서 로컬 디렉토리에 저장
Java에서 이미지 크기 조정

Java는 파일 읽기, 쓰기 또는 삭제와 같은 다양한 유형의 여러 작업을 수행 할 수 있습니다. 다음 예제에서는 세 가지 기술을 사용하여 Java에서 이미지 크기를 조정하는 방법을 보여줍니다.

BufferedImage.getScaledInstance()를 사용하여 Java에서 이미지 크기 조정 및 표시

첫 번째 예에서는 이미지 크기를 조정하고 어디에도 저장하지 않고 프레임 안에 표시합니다. 여기에서BufferedImage클래스의bufferedImage객체를 만듭니다. BufferedImage클래스는 그래픽 이미지를 직사각형 픽셀의 배열로 나타내는Image클래스를 확장합니다. 이미지를 읽기 위해ImageIO.read()함수를 사용합니다. 여기서ImageIO는 입력 및 출력 작업을 수행하기위한readwrite와 같은 정적 메서드를 포함하는 클래스입니다.

File클래스 생성자를 호출하고 이미지 위치를 인수로 전달하는new File()메소드를 사용하여 이미지를 얻습니다. bufferedImage객체를 가져 오면이를 사용하여 이미지의 크기가 조정 된 버전을 생성하는getScaledInstance()메서드를 호출합니다.

getScaledInstance함수는 세 개의 인수를 사용합니다. 처음 두 개는 이미지에 제공 할 픽셀 단위의 너비와 높이이고 마지막 인수는 크기 조정에 사용할 알고리즘입니다. 여기서는 클래스가 기본 샘플링 알고리즘을 사용하도록 지시하는Image.SCALE_DEFAULT함수를 사용합니다.

완료되면JFrame개체를 사용하여 이미지를 표시하는 창을 만듭니다. frame개체의 레이아웃을FlowLayout으로 설정하여 구성 요소를 한 줄로 배열합니다. 그런 다음 창의 크기를 설정합니다. 그림을 완전히 표시하려면이 크기가 이미지의 높이와 너비보다 커야합니다.

마지막으로 이미지를 표시하기 위해JLabel의 객체를 만들고 이미지를 아이콘으로 설정하는section클래스를 호출합니다. 마지막으로jLabel객체를frame객체에 추가하고 가시성을 true로 설정합니다.

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

public class ResizeImageExample {
  public static void main(String[] args) throws IOException {
    new ResizeImageExample();
  }

  public ResizeImageExample() throws IOException {
    BufferedImage bufferedImage = ImageIO.read(new File("C:\\Users\\User1\\Pictures\\java.png"));
    Image image = bufferedImage.getScaledInstance(600, 400, Image.SCALE_DEFAULT);

    ImageIcon icon = new ImageIcon(image);
    JFrame frame = new JFrame();
    frame.setLayout(new FlowLayout());
    frame.setSize(800, 600);

    JLabel jLabel = new JLabel();
    jLabel.setIcon(icon);
    frame.add(jLabel);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

출력:

자바 크기 조정 이미지 1

Graphics2DImageIO를 사용하여 이미지 크기를 조정하고 Java에서 로컬 디렉토리에 저장

두 번째 방법에서는Graphics2D클래스를 사용하여 그래픽을 만듭니다. 첫 번째 단계는 이미지 경로를 포함하는 인수로File객체를 사용하는ImageIo.read()메소드를 사용하여 이미지 파일을 가져 오는 것입니다. ImageIo.read()BufferedImage객체,bufferedImageInput을 반환합니다. 이미지를 작성할 때 사용할 다른BufferedImage객체를 만듭니다. 높이, 너비 및 이미지 유형의 세 가지 인수가 필요합니다.

이제Graphics2D객체g2d를 반환하는bufferdImageOutput객체를 사용하여createGraphics()메소드를 호출합니다. 그런 다음 6 개의 인수를 사용하는drawImage()메서드를 사용하여 이미지를 만듭니다. 첫 번째는BufferedImage객체이고 두 번째와 세 번째는 두 값이 모두 0 인 경우 크기에 따라 확장되는 x 및 y 좌표입니다. 네 번째와 다섯 번째 인수는 이미지에 제공 할 새 높이와 너비를 나타내고 마지막 인수는이 경우nullImageObserver입니다.

계속하기 전에g2d.dispose()함수를 사용하여g2d에서 사용하는 모든 컨텍스트와 리소스를 삭제합니다. 크기가 조정 된 이미지를 로컬 디렉토리에 저장하려면bufferedImageOutput객체, 새 이미지 파일에 지정할 이름 및 파일 경로가있는File생성자를받는ImageIo.write()함수를 사용합니다.

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

public class ResizeImageExample {
  public static void main(String[] args) throws IOException {
    resizeFile("C:\\Users\\Rupam Saini\\Pictures\\java.png",
        "C:\\Users\\Rupam Saini\\Pictures\\java-resized.png", 500, 500);
  }

  public static void resizeFile(String imagePathToRead, String imagePathToWrite, int resizeWidth,
      int resizeHeight) throws IOException {
    File fileToRead = new File(imagePathToRead);
    BufferedImage bufferedImageInput = ImageIO.read(fileToRead);

    BufferedImage bufferedImageOutput =
        new BufferedImage(resizeWidth, resizeHeight, bufferedImageInput.getType());

    Graphics2D g2d = bufferedImageOutput.createGraphics();
    g2d.drawImage(bufferedImageInput, 0, 0, resizeWidth, resizeHeight, null);
    g2d.dispose();

    String formatName = imagePathToWrite.substring(imagePathToWrite.lastIndexOf(".") + 1);

    ImageIO.write(bufferedImageOutput, formatName, new File(imagePathToWrite));
  }
}

크기 조정 전 이미지 :

자바 크기 조정 이미지 2

크기 조정 후 이미지 :

자바 크기 조정 이미지 3

작가: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

관련 문장 - Java Image