HOWTO · Java

Java 中的 ImageIO

本文介紹了 imageio 類以及如何使用它在 Java 中讀取和寫入影象。

本頁內容

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

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

在 Java 中使用 ImageIO 來讀取影象

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

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

我們建立一個函式 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