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

3

我对图像文件的信息了解较少。

为了能够在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)。
然后,从这个答案中,我尝试了下面使用“压缩质量”代码部分: 代码部分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): 源png图像

代码第二部分后的图像(JPEG): 第二部分代码结果jpeg

为什么会发生这种情况?

1个回答

2

在“Code part 2”中,请尝试编写newBufferedImage而不是bufferedImageFile

因此,将此行更改为:

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

如果你试图以JPEG格式编写PNG图像,你会得到奇怪的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接