在 Java 中调整图像大小
-
在 Java 中使用
BufferedImage.getScaledInstance()
调整和显示图像的大小 -
在 Java 中使用
Graphics2D
和ImageIO
调整图像大小并保存到本地目录
Java 可以执行多种不同类型的操作,例如读取、写入或删除文件。在以下示例中,我们将演示如何使用三种技术在 Java 中调整图像大小。
在 Java 中使用 BufferedImage.getScaledInstance()
调整和显示图像的大小
在第一个示例中,我们调整图像大小并将其显示在框架内,而不将其保存在任何地方。在这里,我们创建了 BufferedImage
类的对象 bufferedImage
。BufferedImage
类扩展了 Image
类,将图形图像表示为矩形像素数组。要读取图像,我们使用 ImageIO.read()
函数。在这里,ImageIO
是一个包含静态方法(如 read
和 write
)的类,用于执行输入和输出操作。
我们使用 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 中使用 Graphics2D
和 ImageIO
调整图像大小并保存到本地目录
在第二种方法中,我们使用 Graphics2D
类来创建图形。第一步是使用 ImageIo.read()
方法获取图像文件,该方法将 File
对象作为包含图像路径的参数。ImageIo.read()
返回 BufferedImage
对象,bufferedImageInput
。我们创建了另一个在写入图像时使用的 BufferedImage
对象。它接受三个参数:高度、宽度和图像类型。
现在我们使用返回 Graphics2D
对象 g2d
的 bufferdImageOutput
对象调用 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));
}
}
调整大小前的图像:
调整大小后的图像:
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