将 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 图像,您最终会得到奇怪的结果。
我对图像文件的了解很少。
为了能够在 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 图像,您最终会得到奇怪的结果。