因为使用错误的色彩空间渲染图像,给BufferedImage设置type为BufferedImage.TYPE_INT_RGB,如果不行再设置为TYPE_INT_ARGB,或者TYPE_INT_BGR,因为原本图片的位深度是24,替换的位深度是32或者原本图片的位深度是32,替换的位深度是24这两种都是不行的
BufferedImage bi1 = ImageIO.read(bais);
//上面这句代码后面加下面内容即可解决
BufferedImage resizedImage = new BufferedImage(bi1.getWidth(), bi1.getHeight(),
BufferedImage.TYPE_INT_RGB);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(bi1, 0, 0, bi1.getWidth(), bi1.getHeight(), null);
g.dispose();
ImageIO.write(resizedImage, imageType , file);
bais.close();