Java 中的 ImageIO

Rupam Yadav 2023年10月12日
  1. 在 Java 中使用 ImageIO 來讀取影象
  2. 在 Java 中使用 ImageIO 編寫影象並更改格式
Java 中的 ImageIO

ImageIO 是 Java 中的一個類,是 javax.imageio 包的一部分,其中包含執行讀取或寫入影象等操作的各種方法。

我們將在以下部分學習使用 ImageIO 類來讀取和寫入影象。

在 Java 中使用 ImageIO 來讀取影象

我們使用 ImageIO 類的 read() 函式來讀取影象。在程式中,我們建立了一個 File 的物件,並將檔案的路徑作為引數傳遞給建構函式。

我們使用 ImageIO 呼叫 read() 方法並將其傳遞給返回 BufferedImage 物件的 file 物件。我們已經成功地讀取了影象,我們使用 JFrameImageIcon 在視窗中顯示影象。

我們建立一個函式 setImageToFrame() 並將 bufferedImage 作為引數傳送。在 setImageToFrame() 函式中,我們建立一個 ImageIcon 物件並使用 setIcon() 函式將其設定為 JLabel 的圖示。

一旦我們將標籤新增到框架並執行程式,我們就可以在輸出中看到影象。

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 JavaExample {
  public static void main(String[] args) {
    try {
      File file = new File(
          "C:\\Users\\Rupam Saini\\IdeaProjects\\Java Examples\\src\\main\\java\\sample_image.jpg");

      BufferedImage bufferedImage = ImageIO.read(file);

      setImageToFrame(bufferedImage);

    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  static void setImageToFrame(BufferedImage image) {
    ImageIcon imageIcon = new ImageIcon(image);

    JFrame jFrame = new JFrame();
    jFrame.setLayout(new FlowLayout());
    jFrame.setSize(700, 500);

    JLabel jLabel = new JLabel();
    jLabel.setIcon(imageIcon);

    jFrame.add(jLabel);
    jFrame.setVisible(true);

    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

輸出:

imageio1

我們還可以使用 read() 函式從連結中讀取影象。

我們需要建立一個 URL 物件並使用指向影象的連結作為引數建構函式。我們將 URL 物件傳遞給 read() 方法。

URL url = new URL(
    "https://images.unsplash.com/photo-1516475429286-465d815a0df7?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&dl=will-klinzman-oaCD9WYdNlU-unsplash.jpg&w=640");

BufferedImage bufferedImage = ImageIO.read(url);

輸出:

影象 IO2

在 Java 中使用 ImageIO 編寫影象並更改格式

我們可以使用 ImageIO 類執行的另一個有用操作是寫入影象並更改其格式。我們首先像在前面的示例中那樣讀取影象,然後呼叫 ImageIO 類的 write() 函式,該函式接受三個引數。

write() 方法的第一個引數是 BufferedImage 物件。第二個引數是我們要寫入新影象的格式或副檔名。最後一個引數是具有新副檔名的新影象路徑的 File 物件。

在我們的示例中,我們將影象的格式從 JPG 更改為 PNG。我們有兩個影象:原始影象和我們使用 write() 方法建立的另一個影象。

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

public class JavaExample {
  public static void main(String[] args) {
    try {
      File file = new File(
          "C:\\Users\\Rupam Saini\\IdeaProjects\\Java Examples\\src\\main\\java\\sample_image.jpg");

      BufferedImage bufferedImage = ImageIO.read(file);

      ImageIO.write(bufferedImage, "png",
          new File(
              "C:\\Users\\Rupam Saini\\IdeaProjects\\Java Examples\\src\\main\\java\\sample_image.png"));

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

輸出:

影象 IO3

作者: 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