在 Java 中调整图像大小

Rupam Yadav 2023年10月12日
  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 java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;

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 java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

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

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