我正在尝试将图像(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);
答案 0 :(得分:3)
您应该直接将其写入FileOutputStream
。
InputStream input = new ByteArrayInputStream(bytes);
OutputStream output = new FileOutputStream(fileName);
IOUtils.copy(input, output);
图像是二进制数据,而不是字符数据。您不应该使用Writer
,它用于字符数据,但您应该使用OutputStream
,它用于二进制数据。只要您不想操纵图像,BufferedImage
和JPEGImageEncoder
就毫无意义。
答案 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"));