在 Java 中調整影象大小

Rupam Yadav 2023年1月30日 2021年7月1日
  1. 在 Java 中使用 BufferedImage.getScaledInstance() 調整和顯示影象的大小
  2. 在 Java 中使用 Graphics2DImageIO 調整影象大小並儲存到本地目錄
在 Java 中調整影象大小

Java 可以執行多種不同型別的操作,例如讀取、寫入或刪除檔案。在以下示例中,我們將演示如何使用三種技術在 Java 中調整影象大小。

在 Java 中使用 BufferedImage.getScaledInstance() 調整和顯示影象的大小

在第一個示例中,我們調整影象大小並將其顯示在框架內,而不將其儲存在任何地方。在這裡,我們建立了 BufferedImage 類的物件 bufferedImageBufferedImage 類擴充套件了 Image 類,將圖形影象表示為矩形畫素陣列。要讀取影象,我們使用 ImageIO.read() 函式。在這裡,ImageIO 是一個包含靜態方法(如 readwrite)的類,用於執行輸入和輸出操作。

我們使用 new File() 方法獲取影象,該方法呼叫 File 類建構函式並將影象位置作為引數傳遞給其中。一旦我們獲得了 bufferedImage 物件,我們就用它來呼叫 getScaledInstance() 方法來建立影象的縮放版本。

getScaledInstance 函式接受三個引數:前兩個是我們想要給影象的寬度和高度(以畫素為單位),最後一個引數是用於縮放的演算法。在這裡,我們使用 Image.SCALE_DEFAULT 函式,它告訴類使用預設取樣演算法。

完成後,我們建立一個視窗以使用 JFrame 物件顯示影象。我們將 frame 物件的佈局設定為 FlowLayout,它將元件排列成一行。然後,我們設定視窗的大小;請注意,此大小應大於影象的高度和寬度以完整顯示圖片。

最後,為了顯示影象,我們建立了一個 JLabel 物件並呼叫了將影象設定為圖示的 section 類。最後,我們將 jLabel 物件新增到 frame 物件並將可見性設定為 true。

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

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 調整影象大小並儲存到本地目錄

在第二種方法中,我們使用 Graphics2D 類來建立圖形。第一步是使用 ImageIo.read() 方法獲取影象檔案,該方法將 File 物件作為包含影象路徑的引數。ImageIo.read() 返回 BufferedImage 物件,bufferedImageInput。我們建立了另一個在寫入影象時使用的 BufferedImage 物件。它接受三個引數:高度、寬度和影象型別。

現在我們使用返回 Graphics2D 物件 g2dbufferdImageOutput 物件呼叫 createGraphics() 方法。然後,我們使用帶有六個引數的 drawImage() 方法建立影象。第一個是 BufferedImage 物件,第二個和第三個是 x 和 y 座標,如果兩個值都為零,它們會根據大小放大。第四個和第五個引數代表我們想要給影象的新高度和寬度,最後一個引數是 ImageObserver,在我們的例子中是 null

在繼續之前,我們使用 g2d.dispose() 函式處理 g2d 使用的所有上下文和資源。要將調整後的影象儲存在本地目錄中,我們使用 ImageIo.write() 函式,該函式採用 bufferedImageOutput 物件、要賦予新影象檔案的名稱以及帶有檔案路徑的 File 建構函式。

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

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

Author: 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