java ImageIO.write图片上传变色及背景变黑解决
public void getImage(HttpServletRequest request
, HttpServletResponse response
) throws Exception
{
response
.setDateHeader("Expires", 0);
response
.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response
.addHeader("Cache-Control", "post-check=0, pre-check=0");
response
.setHeader("Pragma", "no-cache");
response
.setContentType("image/jpeg");
String uri
= request
.getRequestURI();
String imgPath
= uri
.replace("/ofc/rest/img", "");
File image
= new File(imgPath
);
BufferedImage bi
= ImageIO
.read(image
);
BufferedImage newBi
= resizeImagePng(bi
.getWidth(), bi
.getHeight(),bi
);
Graphics2D g2d
= newBi
.createGraphics();
g2d
.setComposite(AlphaComposite
.getInstance(AlphaComposite
.SRC_ATOP
, 1.0f));
ServletOutputStream out
= response
.getOutputStream();
g2d
.drawImage(newBi
,0,0,null
);
ImageIO
.write(newBi
,"png", out
);
}
public static BufferedImage
resizeImagePng(int x
, int y
, BufferedImage bfi
) {
BufferedImage bufferedImage
= new BufferedImage(x
, y
, BufferedImage
.TYPE_INT_ARGB
);
bufferedImage
.getGraphics().drawImage(
bfi
.getScaledInstance(x
, y
, Image
.SCALE_SMOOTH
), 0, 0, null
);
return bufferedImage
;
}
public static void saveAs(BufferedImage image
, String formatName
, ServletOutputStream outFile
) throws IOException
{
if (formatName
.equalsIgnoreCase("jpg") || formatName
.equalsIgnoreCase("jpeg")) {
BufferedImage tag
= new BufferedImage(image
.getWidth(), image
.getHeight(), BufferedImage
.TYPE_INT_BGR
);
Graphics g
= tag
.getGraphics();
g
.drawImage(image
, 0, 0,image
.getWidth(), image
.getHeight(),image
.getGraphics().getColor(), null
);
g
.dispose();
image
= tag
;
}
ImageIO
.write(image
, formatName
, outFile
);
}