将图像byte []转换为文件

时间:2011-08-26 22:29:29

标签: java image bytearray

我正在尝试将图像(png,jpg,tiff,gif)转换为磁盘上的文件。当我将其存储在文件中后查看它时,我看不到该文件。

以下是我根据其他论坛讨论尝试过的一些代码:

byte[] inFileName = org.apache.commons.io.FileUtils.readFileToByteArray(new File("c:/test1.png"));

InputStream inputStream = new ByteArrayInputStream(inFilename);
..String fileName="test.png";
Writer writer = new FileWriter(fileName);
IOUtils.copy(inputStream, writer,"ISO-8859-1");

这会创建一个我看不到的png文件。

我尝试使用基于其他一些讨论的ImageIO,但无法让它工作。任何帮助表示赞赏。

    Image inImage = ImageIO.read(new ByteArrayInputStream(inFilename));
BufferedImage outImage = new BufferedImage(100, 100,
            BufferedImage.TYPE_INT_RGB); 
 OutputStream os = new FileOutputStream(fileName);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
//encoder.encode(inImage);

2 个答案:

答案 0 :(得分:3)

您应该直接将其写入FileOutputStream

InputStream input = new ByteArrayInputStream(bytes);
OutputStream output = new FileOutputStream(fileName);
IOUtils.copy(input, output);

图像是二进制数据,而不是字符数据。您不应该使用Writer,它用于字符数据,但您应该使用OutputStream,它用于二进制数据。只要您不想操纵图像,BufferedImageJPEGImageEncoder就毫无意义。

答案 1 :(得分:0)

你想做什么;读取PNG图像并将其另存为JPEG?

您的第一个代码段不起作用,因为您使用Writer来写入数据。 Writer仅适用于编写文本文件。 PNG和JPEG文件包含二进制数据,而不是文本。

您可以使用ImageIO API加载图像:

BufferedImage img = ImageIO.read(new File("C:/test.png"));

然后使用ImageIO API以另一种格式编写它:

ImageIO.write(img, "jpg", new File("C:/test.jpg"));