Java-ImageIO.write(image, "jpg", iamgeOut)输出的图片失真

发布于 2016-12-28 03:48:21 字数 127 浏览 1925 评论 2

ImageIO.write(image, "jpg", iamgeOut)输出的图片会失真,ImageIO.write(image, "png", iamgeOut)则不会,原因何在?
是因为jpg的格式会压缩,而png不会吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2017-07-05 03:59:04

原因:图片本身的问题(ICC丢失或不全)
链接:http://blog.csdn.net/shixing_11/article/details/6897871

public static BufferedImage toBufferedImage(File img) throws IOException {
Image image = Toolkit.getDefaultToolkit().getImage(img.getPath());
BufferedImage bimage = null;
if (image instanceof BufferedImage) {
return (BufferedImage) image;
}
image = new ImageIcon(image).getImage();
int width = image.getWidth(null);
int height = image.getHeight(null);
if (width < 0 || height < 0) {
/*Map<String,Integer> map = getImageSize(img);
width = map.get(IMAGE_WIDTH);
height = map.get(IMAGE_HEIGHT);*/
return null;
}
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
try {
int transparency = Transparency.OPAQUE;
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
bimage = gc.createCompatibleImage(width, height, transparency);
} catch (HeadlessException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

if (bimage == null) {
int type = BufferedImage.TYPE_INT_RGB;
bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
}
Graphics g = bimage.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
return bimage;
}

虐人心 2017-05-30 17:51:37

在dispose()之后不要return了,直接打印出来

ServletOutputStream responseOutputStream = response.getOutputStream();
// 输出图象到页面
ImageIO.write(image, "JPEG", responseOutputStream);
out.clear();
out = pageContext.pushBody();

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文