Java生成100x100红色JPG呈紫色问题排查求助
问题原因及解决方案
嗨,我正好碰到过类似的坑,咱们来一步步拆解:
为什么红色变成了紫色?
问题出在你创建BufferedImage时用的类型:BufferedImage.TYPE_INT_ARGB。这个类型是带Alpha(透明)通道的图像格式,但JPEG(.jpg)格式本身不支持透明通道。当ImageIO.write()把带Alpha的图像转存为JPG时,会对颜色通道做强制转换,原本的纯红色(RGB值255,0,0,Alpha值255)因为Alpha通道的存在,被错误解析,最终呈现出紫色。
怎么修复?
把BufferedImage的类型改成不带Alpha通道的BufferedImage.TYPE_INT_RGB就可以了,这个类型完全适配JPG的色彩模式。
修改后的完整代码
import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class ImageWriter { public static void main(String[] args) throws IOException { String fileName = "red_100.jpg"; String filePath = "c:\\temp\\"; int width = 100; int height = 100; // 这里把TYPE_INT_ARGB改成TYPE_INT_RGB BufferedImage renderdImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); for(int x=0; x<width; x++) { for(int y=0; y<height; y++) { renderdImg.setRGB(x, y, Color.RED.getRGB()); } } File fileToWrite = new File(filePath + fileName); ImageIO.write(renderdImg, "jpg", fileToWrite); } }
额外小提示
如果你之后需要生成带透明效果的图像,记得用PNG格式保存(把ImageIO.write()的第二个参数改成"png"),因为PNG原生支持Alpha通道,不会出现颜色偏差的问题。
内容的提问来源于stack exchange,提问作者JavaSheriff
相关产品推荐
相关产品推荐

