В Python, как вы конвертируете 8-битные двоичные числа в их символы ASCII? - PullRequest
2 голосов
/ 01 марта 2012

Я пытаюсь извлечь скрытое сообщение из синих пикселей изображения так, чтобы, если синее значение было четным, оно представляло собой 0 в двоичной строке, а если синее значение было нечетным, оно представляло собой 1в двоичной строке.Каждая из 8-битных двоичных строк представляет символ, и вместе символы становятся скрытым сообщением.

Я разбил всю двоичную строку на 8-битные двоичные подстроки, но как мне преобразовать эти "куски" в символы ASCII?chr (), ord () и unichr () не работают.Есть ли метод или функция, которую можно использовать для прямого преобразования 8-битной двоичной подстроки в соответствующий ей символ ASCII, или мне нужно вручную преобразовать строку?

import Image

def chunks(s, n):
    for start in range(0, len(s), n):
        yield s[start:start+n]

image = Image.open('image.png')
imagePixels = image.load()
imageWidth = image.size[0]
imageHeight = image.size[1]
blueValueEightString = "" 

for y in range(imageHeight):
    for x in range(imageWidth):
        blueValue = imagePixels[x, y][2]

        if blueValue%2 == 0:
            blueValue = 0
        else: 
            blueValue = 1

        blueValueString = str(blueValue)
        blueValueEightString += blueValueString

for chunk in chunks(blueValueEightString, 8):
    print chunk

1 Ответ

9 голосов
/ 01 марта 2012

Вам нужно сначала преобразовать его в целое число, а затем вы можете использовать chr(), чтобы получить ядро ​​символа ascii, соответствующее значению:

>>> binary_string = '01110111'
>>> int(binary_string, 2)
119
>>> chr(int(binary_string, 2))
'w'
...