Python:将十六进制字符串保存到jpg图像文件

时间:2015-09-17 10:12:30

标签: python image python-2.7 hex jpeg

我有多个像这样的十六进制字符串(大字符串,所以我截断了中间):

  

0xFFD8FFEE000E41646F626500640000000002FFE11E2445786966000049492A006A0500002C010000010000002C0100000100000041646F62652050686F746F73686F702043533620284D6163 .............................................. .................................................. .................................................. .............. 7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3FF7F8F9FAFFC4001F0100030101010101010101010000000000000102030405060708090A0BFFC400B511000201020404030407050404000102770

我想将每个字符串保存在文件中。但是我的代码效果不好:

import binascii

data = binascii.a2b_hex(my_hex_string)
with open('/path/image.jpg', 'wb') as image_file:
    image_file.write(data)

我收到此错误:

  

TypeError:奇数长度字符串

当我删除第一个0时,我得到了这个:

  

TypeError:找到非十六进制数字

当我删除两个第一个字符时(因为JPG应该以FF D8开头),我再次得到这个:

  

TypeError:奇数长度字符串

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

你确定字符串里面没有额外的东西吗?空白,换行等等?

尝试my_hex_string.strip()

此外,有可能,你可以在字符串中有空格,所以你可以做这样的事情来清理它们:

binascii.a2b_hex(toSend.replace(' ', ''))

答案 1 :(得分:0)

3.5岁线程。但是得到了很多意见,所以我将添加我的2c。 OP的代码对我来说很好。我的猜测是十六进制字符串已损坏。最突出的是,没有看到FFD9 for "end of image."

答案 2 :(得分:0)

我遇到了同样的问题,并且测试了您的代码。我认为您的代码没有错。只需尝试从十六进制代码的开头删除0x。我认为这对您有用。