将PNG转换为JPEG,使用压缩质量,为什么反转颜色?

时间:2016-09-28 15:36:40

标签: java png jpeg javax.imageio

我的图像文件信息很少。

为了能够在Java中将PNG转换为JPEG,我首先使用下面的代码部分将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 个答案:

答案 0 :(得分:2)

在“代码第2部分”上尝试编写newBufferedImage而不是bufferedImageFile

因此请将此行更改为:

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

如果您尝试以JPEG格式编写PNG图像,最终会产生奇怪的结果。