2011-08-26 143 views
0

我試圖將圖像(PNG,JPG,TIFF,GIF)轉換爲磁盤上的文件。當我在將文件存儲到文件後查看它時,我看不到該文件。將圖像byte []轉換爲文件

下面是一些代碼基於其他論壇討論我曾嘗試:

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); 
+3

做我的眼睛騙我?你真的**寫了一個文本編碼的PNG文件嗎? –

+0

http://stackoverflow.com/questions/1580038/byte-array-to-image-file – Vijay

+0

http://stackoverflow.com/questions/1580038/byte-array-to-image-file – Vijay

回答

2

您應該直接寫入FileOutputStream

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

圖像是二進制數據,而不是字符數據。您不應該使用Writer,它是用於字符數據的,但您應該使用OutputStream,它用於二進制數據。只要你不想操縱圖像,BufferedImageJPEGImageEncoder就毫無意義。

+1

+1因爲我是我自己無法回答這個問題,在閱讀完代碼後正忙着重新貼上我的下巴...... –

0

你想做什麼;讀一個PNG圖像並保存爲JPEG?

您的第一個代碼段不起作用,因爲您正在使用Writer來編寫數據。 A 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"));