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