JAVA ImageIO图片处理后变色问题
最初使用ImagIO.Read() 从InputStream 转成BufferImage 然后进行水印添加,普通图片没问题,但是当前端通过JS剪裁传入后就出现变色的问题
压缩前
压缩后
网上查找了很久, 基本确定是ImageIO.Read 的问题,解决方案就变成避免使用这个函数,替代的方案为
Toolkit.getDefaultToolkit().getImage(URL);
但是此方法只能使用URL或者具体路径,那么又回到最初。
后经查询,发现,可以试试将图片的aRGB换成RGB。
Having an image develop a tint usually means the image is being rendered using the wrong colorspace, Adobe RGB vs. sRGB being a perennial favorite. Try changing TYPE_INT_ARGB to TYPE_INT_RGB in your code.
思路就是将ImageIO得到的BufferImage 赋值给一个新的已经设定好RGB的BufferImage, 然后就有以下代码
BufferedImage _img = javax.imageio.ImageIO.read(file);
BufferedImage _newImg= new BufferedImage(_img.getWidth(),_img.getHeight(),BufferedImage.TYPE_INT_RGB);
_newImg.getGraphics().drawImage(_img, 0, 0, null);
然后再进行压缩,解决。