如何将 BufferedImage 保存为文件

我正在使用 Imgscalr Java 库来调整图像的大小。

Resize ()方法调用的结果是一个 BufferedImage 对象。现在我想将它保存为一个文件(通常。Jpg).

我该怎么做?我想从 BufferedImage-> File开始,但是也许这不是正确的方法?

264112 次浏览
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);

可以使用 javax.imageio.ImageIO类的 write 方法保存 BufferedImage对象。该方法的签名如下:

public static boolean write(RenderedImage im, String formatName, File output) throws IOException

这里的 im是要写入的 RenderedImageformatName是包含格式非正式名称(例如 png)的 String,而 output是要写入的文件对象。下面显示了 PNG 文件格式方法的一个示例用法:

ImageIO.write(image, "png", file);

一句话:

ImageIO.write(Scalr.resize(ImageIO.read(...), 150));
  1. 下载并将 Imgscalr-lib-x.x. jarImgscalr-lib-x. x-javadoc. jar添加到项目库中。
  2. 在您的代码中:

    import static org.imgscalr.Scalr.*;
    
    
    public static BufferedImage resizeBufferedImage(BufferedImage image, Scalr.Method scalrMethod, Scalr.Mode scalrMode, int width, int height)  {
    BufferedImage bi = image;
    bi = resize( image, scalrMethod, scalrMode, width, height);
    return bi;
    }
    
    
    // Save image:
    ImageIO.write(Scalr.resize(etotBImage, 150), "jpg", new File(myDir));
    

创建并保存 java.awt.image.bufferedImage 到 file:

import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
public class Main{
public static void main(String args[]){
try{
BufferedImage img = new BufferedImage(
500, 500, BufferedImage.TYPE_INT_RGB );


File f = new File("MyFile.png");
int r = 5;
int g = 25;
int b = 255;
int col = (r << 16) | (g << 8) | b;
for(int x = 0; x < 500; x++){
for(int y = 20; y < 300; y++){
img.setRGB(x, y, col);
}
}
ImageIO.write(img, "PNG", f);
}
catch(Exception e){
e.printStackTrace();
}
}
}

备注:

  1. 创建一个名为 MyFile.png 的文件。
  2. 图像是500乘500像素。
  3. 覆盖现有文件。
  4. 图像的颜色是黑色,顶部有一条蓝色条纹。

答案在 Java 文档的 编写/保存图像教程中。

Image I/O类提供了以下保存图像的方法:

static boolean ImageIO.write(RenderedImage im, String formatName, File output)  throws IOException

教程解释了这一点

BufferedImage 类实现 RenderedImage 接口。

所以它可以在方法中使用。

比如说,

try {
BufferedImage bi = getMyImage();  // retrieve image
File outputfile = new File("saved.png");
ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
// handle exception
}

试试阻挡包围 write调用非常重要,因为根据 空气污染指数,“如果在写入过程中发生错误”,该方法将抛出 IOException

还详细解释了该方法的目标、参数、返回值和抛出值:

使用支持给定格式的任意 ImageWriter 将图像写入文件。如果已经存在文件,则丢弃其内容。

参数:

要写的渲染图像。

Format Name-一个字符串,包含格式的非正式名称。

要写入的文件。

返回:

如果没有找到合适的作者,则为 false。

投掷:

如果任何参数为空,则为 IllegalArgumentException。

IOException-如果在写入过程中发生错误。

然而,formatName似乎仍然相当模糊不清; 本教程稍微澄清了一下:

Write 方法调用实现编写“ PNG 编写器插件”的 PNG 的代码。使用术语插件是因为 Image I/O 是可扩展的,并且可以支持多种格式。

但是下面的标准图像格式插件: JPEG,PNG,GIF,BMP 和 WBMP 始终存在。

对于大多数应用程序来说,使用这些标准插件中的一个就足够了。它们的优点是随时可以使用。

不过,你还可以使用其他格式:

Image I/O 类提供了一种方法来插入对可以使用的其他格式的支持,并且存在许多这样的插件。如果您对系统中可加载或保存的文件格式感兴趣,可以使用 ImageIO 类的 getReaderFormatNames 和 getWriterFormatNames 方法。这些方法返回一个字符串数组,列出此 JRE 中支持的所有格式。

String writerNames[] = ImageIO.getWriterFormatNames();

返回的名称数组将包含所安装的任何附加插件,并且这些名称中的任何一个都可以用作选择图像编写器的格式名称。

有关完整和实用的示例,可以参考 Oracle 的 SaveImage.java例子。