Course Info‎ > ‎

Lab Snippets

import scipy,os,os.path,struct
from PIL import Image
from pylab import *
ion()

cover = array(Image.open("jpg/00047-scaled.jpg"))
data = randint(0,256,size=100000)

def unpack_bits_slow(a):
    a = array(bytearray(a),'B')
    n = len(a)
    result = zeros(n*8,'B')
    for i in range(n):
        for j in range(8):
            result[i*8+j] = (0!=a[i]&(1<<j))
    return result

def unpack_bits(a):
    a = array(bytearray(a),'B')
    n = len(a)
    i = arange(n)
    result = zeros(n*8,'B')
    for j in range(8):
        result[i*8+j] = (0!=a[i]&(1<<j))
    return result

def hide_bits(cover,data):
    data = bytearray(data)
    n = len(data)
    nb = struct.pack("I",n)
    data = bytearray(nb)+data
    data = array(data,'B')
    bits = unpack_bits(data)
    assert bits.size<=cover.size
    cover = cover.copy()
    cover.ravel()[:len(bits)] = ((cover.ravel()[:len(bits)]&0xfe)|bits)
    return cover

def pack_bits(b):
    a = zeros((len(b)+7)/8,'B')
    i = arange(len(a))
    for j in range(8):
        a[i] |= (b[i*8+j]!=0)*(1<<j)
    return str(bytearray(a))

def recover_bits(steg):
    data = pack_bits(steg.ravel()&1)
    n = struct.unpack("I",data[:4])[0]
    return data[4:4+n]



Comments