###########steg.py##############
#reddit.com/r/dailyprogrammer
#int-101
#puts data in image
import sys, Image
#verify correct number of arguments entered
if len(sys.argv) != 3:
print 'Please specify correct arguments'
print 'Usage: steg.py {image file} {data file}'
sys.exit()
#get file names from arguments
image_fn = sys.argv[1]
data_fn = sys.argv[2]
#read in our image file and declare variables
img = Image.open(image_fn)
pixels = img.load()
im_width = img.size[0]
im_height = img.size[1]
#read in our data file and declare variables
with open(data_fn, 'r') as f:
data = f.read()
b_data = ""
for char in data:
b_data += '%08d'%int(bin(ord(char))[2:])
b_data += '11111111' #used to find end when getting data out
#add data to image file
for x in range(im_width):
for y in range(im_height):
if len(b_data) == 0:
break
pix = pixels[x,y]
blueBase = bin(pix[2])[2:] #current pixels blue binary value
newBlue = blueBase[:-2] + b_data[0:2] #create new binary value
b_data = b_data[2:] #remove used bits from b_data
pixels[x,y] = (pix[0],pix[1],int(newBlue,2)) #put new pixel into image file
else:
continue
break
#save new image
img.save('steg.png')
###########desteg.py#############
#desteg.py
#reddit.com/r/dailyprogrammer
#int-101
#pulls data out of image
import sys, Image
#verify correct number of arguments entered
if len(sys.argv) != 2:
print 'Please specify correct arguments'
print 'Usage: desteg.py {image file}'
sys.exit()
#get file names from arguments
image_fn = sys.argv[1]
#read in our image file and declare variables
img = Image.open(image_fn)
pixels = img.load()
im_width = img.size[0]
im_height = img.size[1]
#get bianry data
b_data = ""
for x in range(im_width):
for y in range(im_height):
pix = pixels[x,y]
b_data += bin(pix[2])[-2:]
#get actual data
s_data = ""
for x in range(0,len(b_data),8):
chunk = b_data[x:x+8]
if chunk == '11111111':
break #end of steganography data
char = chr(int(chunk,2))
s_data += char
print s_data