2016-09-28 21 views
1

我對圖像文件的信息很少。將PNG轉換爲JPEG,使用壓縮質量,爲什麼是倒置的顏色?

爲了能夠PNG轉換爲JPEG在Java中,起初我用下面的代碼部分,PNG轉換爲JPEG:倒

典第1部分)

BufferedImage newBufferedImage = new BufferedImage(bufferedImageFile.getWidth(), bufferedImageFile.getHeight(), 
     BufferedImage.TYPE_INT_RGB); 
newBufferedImage.createGraphics().drawImage(bufferedImageFile, 0, 0, Color.WHITE, null); 
File retTempFile = MakeupFileUtil.createTempFile(fileName); 
ImageIO.write(newBufferedImage, "jpg", retTempFile); 
return retTempFile; 

這將完成任務非常好,但輸出質量低於原始PNG圖像質量(比方說PNG質量是100,但JPEG質量是75)

然後,from this answer,我試過下面的代碼部分,它使用「壓縮質量」

代碼第2部分)

JPEGImageWriteParam jpegParams = new JPEGImageWriteParam(null); 
jpegParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
jpegParams.setCompressionQuality(1f); 
final ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next(); 
writer.setOutput(new FileImageOutputStream(jpegFile)); 
writer.write(null, new IIOImage(bufferedImageFile, null, null), jpegParams); 

但是這一次,轉換JPEG文件得到了反轉的顏色。

源圖像(PNG): source png image

圖片後代碼第2部分(JPEG): part 2 code result jpeg

這究竟是爲什麼?

回答

1

在「代碼部分2」上嘗試並寫入newBufferedImage而不是bufferedImageFile。如果您嘗試寫在JPEG格式PNG圖像你去用怪異的結果落得

writer.write(null, new IIOImage(newBufferedImage, null, null), jpegParams); 

因此改變這一行是。

相關問題