胖五talk

Java图像处理之BufferedImage自动选择图片类型

之前为Nutz添加了一个根据文字生成头像的方法Avatar,但遇到了保存为jpg格式生成图片不对的bug。

后来发现是在新建BufferedImage时设置的参数问题:

1
BufferedImage im = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);

也就是默认选择了带有Alpha通道的格式,而jpg是没有的所以生成结果有了问题。

本来改成了用户可以手动设定BufferedImage类型,但后来发现其实可以通过用户设定文字颜色与背景色进行判断,如果是带有Alpha通道的比如rgba那就应该用BufferedImage.TYPE_INT_ARGB,否者就改成BufferedImage.TYPE_INT_RGB

java代码可以通过Color去判断Alpha值,这就可以自动设定正确的类型了。

1
2
3
4
5
6
int imageType = BufferedImage.TYPE_INT_RGB;
// alpha为255时也就是等同于没有设定alpha通道值
if (colorFont.getAlpha() < 255 || colorBg.getAlpha() < 255) {
imageType = BufferedImage.TYPE_INT_ARGB;
}