JAVA ImageIO图片处理后变色

JAVA ImageIO图片处理后变色问题

最初使用ImagIO.Read() 从InputStream 转成BufferImage 然后进行水印添加,普通图片没问题,但是当前端通过JS剪裁传入后就出现变色的问题

 

JAVA ImageIO图片处理后变色_第1张图片

压缩前

JAVA ImageIO图片处理后变色_第2张图片

压缩后

网上查找了很久, 基本确定是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);

然后再进行压缩,解决。

你可能感兴趣的:(JAVA ImageIO图片处理后变色)