我正在尝试将图像(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
,它用于二进制数据。BufferedImage
和JPEGImageEncoder
是没有意义的,只要你不想操纵图像。
你想做什么?读取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"));