如何一个BufferedImage保存为一个文件(How to save a BufferedIma

2019-06-18 10:11发布

我现在用的是imgscalr Java库,用来调整图像大小。

调整大小()方法调用的结果是一个BufferedImage对象。 我现在想这个保存为一个文件(通常.JPG)。

我怎样才能做到这一点? 我想从去BufferedImage - > File ,但也许这是不正确的做法?

Answer 1:

File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);


Answer 2:

可以保存BufferedImage使用的写入方法的对象javax.imageio.ImageIO类。 该方法的签名是这样的:

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

这里imRenderedImage要被写入, formatName是包含格式的非正式名称字符串(例如PNG)和output将被写入到文件中的对象。 为PNG文件格式的方法的一个示例使用如下所示:

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


Answer 3:

创建并保存一个java.awt.image.BufferedImage到文件:

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. 图像的颜色是黑色横跨顶部的蓝色条纹。


Answer 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调用与try块 ,因为按照该API ,该方法抛出IOException “如果写入过程中发生错误”

还解释是方法的目标,参数,返回,并抛出,更详细地:

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

参数:

IM - 一个RenderedImage被写入。

FORMATNAME - 一个String方含格式的非正式名称。

输出 - 一个文件被写入。

返回:

假,如果没有适当的作家中找到。

抛出:

- 如果任何参数为null。

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

然而, formatName仍然似乎相当含糊不清; 本教程将其清除了一下:

该ImageIO.write方法调用实现PNG写“PNG作家插件”的代码。 术语插件使用,因为图像I / O是可扩展的,并且可以支持多种格式。

但以下标准图像格式插件:JPEG,PNG,GIF,BMP和WBMP总是存在。

对于大多数应用来说已经足够使用这些标准的插件之一。 他们具有容易获得的优势。

有,但是,您可以使用其他格式:

的图像I / O类提供一种在可以使用的其它格式支持堵塞,并且许多这样的插件存在。 如果你有兴趣在什么文件格式都可以载入或保存在系统中,你可以使用getReaderFormatNames和getWriterFormatNames ImageIO类的方法。 这些方法返回的字符串,列出所有在这个JRE支持的格式的数组。

String writerNames[] = ImageIO.getWriterFormatNames();

名称的返回的数组将包括被安装和任何这些名称可被用作格式名称来选择一个图像写入任何额外的插件。

对于一个完整的和实际的例子,一个可以参考Oracle的SaveImage.java例子。



Answer 5:

  1. 下载并添加imgscalr-LIB-xxjar和imgscalr-LIB-XX-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)); 


Answer 6:

作为一个班轮:

ImageIO.write(Scalr.resize(ImageIO.read(...), 150));


文章来源: How to save a BufferedImage as a File