在java中以不同格式编写图像会产生不同的结果

时间:2013-06-08 10:19:17

标签: java image

public static void main(String[] args) throws IOException {

        File original_f = new File(args[0]);
        String[] parts= args[0].split("\\.");
        String output_f = parts[0]+"_bin";
        original = ImageIO.read(original_f);
        grayscale = toGray(original);
        binarized = binarize(grayscale);            //Converts pixel of image in black((0,0,0)) or white( (255,255,255) )

        writeImage(output_f,parts[1]);

}   

private static void writeImage(String output, String part) throws IOException {
        File file = new File(output+".bmp");
        ImageIO.write(binarized, "bmp", file);
}

对图像进行二值化后,我得到了正确答案。二进制化的像素(代码中的变量)是(0,0,0)或(255,255,255)。

但是以jpg格式编写图像后像素不再正确,如果我用bmp格式写图像,那么像素就是正确的。

任何人都可以解释一下可能是什么原因???

2 个答案:

答案 0 :(得分:1)

JPEG是有损图像压缩文件格式。由于有损压缩,您只是丢失了一些像素颜色值的准确度。位图是无损格式,但没有压缩。对于无损压缩,您可以使用PNG。

答案 1 :(得分:0)

如果您使用的是Sun JDK附带的JPEG编码器,那么您还必须确保将没有Alpha通道的图像传递给它。