使用java保存时,图像会改变颜色

时间:2013-12-26 17:55:43

标签: java bufferedimage javax.imageio

保存此图片时:

Holiday Doodle

用这种方法:

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();
    }
}

这是我的结果:

Result

虽然所有照片都不会发生这种情况。

你能告诉我为什么吗?

1 个答案:

答案 0 :(得分:8)

根据comment上的@ uckelman的this post,当图像缺少JFIF标题时,Java的解码器对大多数其他渲染的图像格式做出了不同的假设:

  

我相信你如何检测坏JPEG的问题的答案   找到herehere。你有一个没有JFIF标记的JPEG。   在这种情况下,所有其他图像加载器都假设数据是YCbCr,   除了ImageIO,它假设在通道1和2时它是RGB   没有二次抽样。因此,检查前4个字节是否为FF D8 FF   E1,如果是,则对通道1和2进行二次采样。那就是   你需要转换的情况。

相关问题