Java で画像のサイズを変更する

Rupam Yadav 2023年10月12日
  1. Java で BufferedImage.getScaledInstance() を使用して画像のサイズを変更して表示する
  2. 画像のサイズを変更し、Java で Graphics2DImageIO を使用してローカルディレクトリに保存する
Java で画像のサイズを変更する

Java は、ファイルの読み取り、書き込み、削除など、さまざまなタイプのいくつかの操作を実行できます。次の例では、3つの手法を使用して Java で画像のサイズを変更する方法を示します。

Java で BufferedImage.getScaledInstance() を使用して画像のサイズを変更して表示する

最初の例では、画像のサイズを変更し、どこにも保存せずにフレーム内に表示します。ここでは、BufferedImage クラスのオブジェクト bufferedImage を作成します。BufferedImage クラスは、グラフィカルイメージを長方形ピクセルの配列として表す Image クラスを拡張します。画像を読み取るには、ImageIO.read() 関数を使用します。ここで、ImageIO は、入力および出力操作を実行するための readwrite などの静的メソッドを含むクラスです。

File クラスコンストラクターを呼び出し、その中の引数として画像の場所を渡す new File() メソッドを使用して画像を取得します。bufferedImage オブジェクトを取得したら、それを使用して、画像のスケーリングされたバージョンを作成する getScaledInstance() メソッドを呼び出します。

getScaledInstance 関数は 3つの引数を取ります。最初の 2つは画像に与えるピクセル単位の幅と高さで、最後の引数はスケーリングに使用するアルゴリズムです。ここでは、デフォルトのサンプリングアルゴリズムを使用するようにクラスに指示する Image.SCALE_DEFAULT 関数を使用します。

完了したら、JFrame オブジェクトを使用して画像を表示するウィンドウを作成します。frame オブジェクトのレイアウトを FlowLayout として設定します。これにより、コンポーネントが 1 行に配置されます。次に、ウィンドウのサイズを設定します。画像を完全に表示するには、このサイズが画像の高さと幅よりも大きい必要があることに注意してください。

最後に、画像を表示するために、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);
  }
}

出力:

java サイズ変更画像 1

画像のサイズを変更し、Java で Graphics2DImageIO を使用してローカルディレクトリに保存する

2 番目のメソッドでは、Graphics2D クラスを使用してグラフィックを作成します。最初のステップは、画像パスを含む引数として File オブジェクトを受け取る ImageIo.read() メソッドを使用して画像ファイルを取得することです。ImageIo.read() は、BufferedImage オブジェクト bufferedImageInput を返します。画像を書き込むときに使用する別の BufferedImage オブジェクトを作成します。高さ、幅、画像タイプの 3つの引数を取ります。

ここで、Graphics2D オブジェクト g2d を返す bufferdImageOutput オブジェクトを使用して createGraphics() メソッドを呼び出します。次に、6つの引数を取る drawImage() メソッドを使用して画像を作成します。1つ目は BufferedImage オブジェクト、2つ目と 3つ目は、両方の値がゼロの場合にサイズに応じて拡大する x 座標と y 座標です。4 番目と 5 番目の引数は、画像に与える新しい高さと幅を表し、最後の引数は、この場合は null である ImageObserver です。

先に進む前に、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));
  }
}

サイズ変更前の画像:

java サイズ変更画像 2

サイズ変更後の画像:

java サイズ変更画像 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