当我保存这张图片时:
用这个方法:
private final static Path ROOT_PATH = Paths.getPath("C:/images");
private static void saveImageFromWebSimple(final String url) {
URL u = null;
try {
u = new URL(url);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String file = url.substring(url.indexOf("//") + 2);
Path filePath = ROOT_PATH.resolve(file);
try {
Files.createDirectories(filePath.getParent());
BufferedImage img = ImageIO.read(u);
ImageIO.write(img, "jpg", filePath.toFile());
} catch (IOException e) {
e.printStackTrace();
}
}
这是我的结果:
但并非所有图片都会出现这种情况。
你能告诉我为什么吗?
根据@uckelman的comment on 这个帖子,当图像缺少 JFIF 标头时,Java 解码器对图像格式做出与大多数其他渲染不同的假设:
我相信您关于如何检测不良 JPEG 问题的答案
被发现here and here。您拥有的是没有 JFIF 标记的 JPEG。
在这种情况下,所有其他图像加载器都假设数据是 YCbCr,
除了ImageIO,当通道1和2时,它假设它是RGB
没有进行二次抽样。所以,检查前4个字节是否为FF D8 FF
E1,如果是,通道 1 和 2 是否进行二次采样。这就是
您需要转换的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)