Java で画像のサイズを変更する
-
Java で
BufferedImage.getScaledInstance()
を使用して画像のサイズを変更して表示する -
画像のサイズを変更し、Java で
Graphics2D
とImageIO
を使用してローカルディレクトリに保存する
Java は、ファイルの読み取り、書き込み、削除など、さまざまなタイプのいくつかの操作を実行できます。次の例では、3つの手法を使用して Java で画像のサイズを変更する方法を示します。
Java で BufferedImage.getScaledInstance()
を使用して画像のサイズを変更して表示する
最初の例では、画像のサイズを変更し、どこにも保存せずにフレーム内に表示します。ここでは、BufferedImage
クラスのオブジェクト bufferedImage
を作成します。BufferedImage
クラスは、グラフィカルイメージを長方形ピクセルの配列として表す Image
クラスを拡張します。画像を読み取るには、ImageIO.read()
関数を使用します。ここで、ImageIO
は、入力および出力操作を実行するための read
や write
などの静的メソッドを含むクラスです。
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 で Graphics2D
と ImageIO
を使用してローカルディレクトリに保存する
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));
}
}
サイズ変更前の画像:
サイズ変更後の画像:
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