将JPEG转换为二进制(1和0)格式

时间:2013-11-02 04:35:33

标签: java python image-processing jpeg huffman-code

我想将JPEG文件转换为二进制等效文件,然后将其转换回JPEG格式。 即将JPEG文件转换为1和0并将其输出到文本文件中,然后获取此文本文件并将其转换回原始图像(只是为了检查转换中是否没有错误)

我试过用python中的binascii模块做这个,但似乎有一个我无法理解的编码问题。

如果有人可以帮我解决这个问题真的很棒!

P.S:Java中的解决方案将更受欢迎

2 个答案:

答案 0 :(得分:6)

嗯,你会后悔的;-),但这是一个Python解决方案:

def dont_ask(inpath, outpath):
    byte2str = ["{:08b}".format(i) for i in range(256)]
    with open(inpath, "rb") as fin:
        with open(outpath, "w") as fout:
            data = fin.read(1024)  # doesn't much matter
            while data:
                for b in map(ord, data):
                    fout.write(byte2str[b])
                data = fin.read(1024)

dont_ask("path_to_some_jpg", "path_to_some_ouput_file")

当然,这会将任何文件转换为由“1”和“0”字符组成的8倍大的文件。

顺便说一句,我不会写另一半 - 但不是因为它很难; ​​ - )

答案 1 :(得分:3)

将任何文件(不仅仅是JPG)转换为二进制文件的Java解决方案:

    File input= new File("path to input");
    File output = new File("path to output");

    try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(input));
         BufferedWriter bw = new BufferedWriter(new FileWriter(output))) {
        int read;
        while ((read=bis.read()) != -1) {
              String text = Integer.toString(read,2);
              while (text.length() < 8) {
                    text="0"+text;
              }
              bw.write(text);
        }            
    } catch (IOException e) {
            System.err.println(e);
    }