我想从 PNG 中去除 alpha 通道(透明背景),然后将它们写为 JPEG 图像。更准确地说,我想让透明像素变白。我尝试了两种技术,两种技术都以不同的方式失败:
方法一:
BufferedImage rgbCopy = new BufferedImage(inputImage.getWidth(), inputImage.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = rgbCopy.createGraphics();
graphics.drawImage(inputImage, 0, 0, Color.WHITE, null);
graphics.dispose();
return rgbCopy;
结果:图像具有粉红色背景。
方法二:
final WritableRaster raster = inputImage.getRaster();
final WritableRaster newRaster = raster.createWritableChild(0, 0, inputImage.getWidth(), inputImage.getHeight(), 0, 0, new int[]{0, 1, 2});
ColorModel newCM = new ComponentColorModel(inputImage.getColorModel().getColorSpace(), false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);
return new BufferedImage(newCM, newRaster, false, null);
结果:图像具有黑色背景。
在这两种情况下,输入图像都是 PNG,输出图像是 JPEG,如下所示:ImageIO.write(bufferedImage, "jpg", buffer)
. 万一它是相关的:这是在Java 8上,我正在使用十二猴子库来调整图像的大小,然后再将其写入JPEG。
我已经尝试了上述代码的许多变体,但没有运气。有许多先前的问题建议使用上述代码,但在这种情况下似乎不起作用。