Estoy intentando extraer un mensaje oculto desde el azul de los píxeles de una imagen tal que si el valor de azul es aún, representa un 0 en la cadena binaria, y si el valor de azul es impar, representa un 1 en la cadena binaria. El binario de 8 bits cadenas representan cada uno a un personaje, y juntos, los caracteres se convierten en un mensaje oculto.

He roto toda la cadena binaria en binario de 8 bits subcadenas, pero ¿cómo hago para convertir esos «trozos» en caracteres ASCII? chr() y ord() y unichr() no parecen estar funcionando. Hay un método o función que puede ser utilizado para convertir directamente el binario de 8 bits de la subcadena en su correspondiente carácter ASCII, o tengo que ir a acerca de la conversión manual de la cadena?

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
Usted puede convertir a 8 bits de los números en ASCII: sólo podrá convertir 7-bits de los números. ASCII no se mantiene de 8 bits.

OriginalEl autor | 2012-03-01

1 Comentario

  1. 9

    Usted necesita para convertir primero a un entero, y entonces usted puede utilizar chr() para obtener el carácter ascii coresponding para el valor:

    >>> binary_string = '01110111'
    >>> int(binary_string, 2)
    119
    >>> chr(int(binary_string, 2))
    'w'
    Sería mucho mejor usar la aritmética para convertir los datos de imagePixels en los números que van de 0 a 255 directamente, en lugar de la creación de cadenas, uniéndolas y convertir de nuevo en un número.
    He visto el uso de int con una base de 2 en varios ejemplos ahora. ¿Por qué tiene sentido el uso de una base de 2?

    OriginalEl autor stranac

Dejar respuesta

Please enter your comment!
Please enter your name here