将图像byte[]转换为文件



我正在尝试将图像(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);

你应该直接写给FileOutputStream

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

图像是二进制数据,不是字符数据。你不应该使用Writer,它用于字符数据,但你应该使用OutputStream,它用于二进制数据。BufferedImageJPEGImageEncoder是没有意义的,只要你不想操纵图像。

你想做什么?读取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"));

最新更新