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

Convert PNG to JPEG, Using Compression Quality, Why Inverted colors?

我对图像文件的了解很少。

为了能够在 Java 中将 PNG 转换为 JPEG,起初我使用以下代码部分将 PNG 转换为 JPEG:inverted

代码第 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,我尝试了下面使用 "Compression Quality":

的代码部分

代码第 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):

代码后图像第 2 部分 (JPEG):

为什么会这样?

尝试在 "Code part 2" 上写 newBufferedImage 而不是 bufferedImageFile

因此将此行更改为:

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

如果您尝试以 JPEG 格式写入 PNG 图像,您最终会得到奇怪的结果。