2013-11-02 3 views
-3

Я хочу преобразовать файл JPEG в его двоичный эквивалент, а затем преобразовать его в форму JPEG. т.е. преобразовать файл JPEG в 1 и 0 и вывести его в текстовый файл, а затем взять этот текстовый файл и преобразовать его обратно в исходное изображение (просто чтобы проверить, нет ли ошибок в преобразовании)Преобразование JPEG в двоичный (1 и 0) формат

Я пробовал делая это с модулем binascii в python, но, похоже, проблема кодирования, которую я не могу понять.

Было бы здорово, если бы кто-то помог мне с этим!

PS: Решение в Java будет еще более цениться

+0

Вы говорите, вы хотите, чтобы текстовый файл фактически содержал символы «0» и «1»? Или вы имеете в виду что-то еще? –

+0

Так вы хотите Java * или * Python? И почему тег кодирования Хаффмана? – user2864740

+3

Что вы на самом деле хотите? Технически, файл JPEG уже двоичный. –

ответ

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") 

Конечно, это будет конвертировать любой файл в файл в 8 раз больше, состоящий из символов «1» и «0».

Кстати, я не пишу другую половину - но не потому, что трудно ;-)

решение
+0

Большое спасибо за помощь! – Meet

3

Java, чтобы преобразовать любой файл (не только JPG) в двоичную:

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); 
    } 
Смежные вопросы