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