Hi, This is my first attempt at python. I tried my hand at steganography for fun. The code includes separate, combine, encode, decode functions. The separate function takes a number and it's base and returns a list containing each digit of the number in a list, vice versa for combine. The encode function encodes each char's ascii value into each pixel's RGB values at the least significant end. The decode function does the opposite. e.g.,
a = 97, so if we have at a pixel r, g, b (230, 107, 155) it will become (230, 109, 157) when it's encoded. Since I am new and don't speak the python idiom yet, I would like the experts to pythonify the following code as much as possible for both python 2.6 and 3.0. Any other suggestion to improve the quality would also be highly appreciated Thanks a lot! #The code starts here: def separate(num, base): li = [] while num / base > 0: li.insert(0, num % base) num = num / base li.insert(0,num) return li def combine(tup, base): num = 0 mul = pow(base, len(tup) - 1) for i in tup: num = num + i * mul mul = mul / base return num #Will make changes to the original image and not to a copy! You have been warned! import Image def encode(img, text): x = 0 y = 0 height, width = img.size text = text + "~~" if len(text) > height * width: return false pix = img.load() for c in text: li = separate(ord(c), 10) if(len(li) == 1): li.insert(0, 0) li.insert(0, 0) elif(len(li) == 2): li.insert(0, 0) r, g, b = pix[x, y] r = r - (r % 10) + li[0] if (r > 255): r = r - 10 g = g - (g % 10) + li[1] if (g > 255): g = g - 10 b = b - (b % 10) + li[2] if (b > 255): b = b - 10 pix[x,y] = (r,g,b) if y == width - 1: y = 0 x = x + 1 else: y = y + 1 img.save(img.filename) def decode(img): x = 0 y = 0 text = "" c = "" height, width = img.size pix = img.load() while 1: r, g, b = pix[x, y] if (c == '~') and chr(combine([r % 10, g % 10, b % 10], 10)) == '~': return text[:len(text) - 1] c = chr(combineUnits([r % 10, g % 10, b % 10], 10)) text = text + c if y == width - 1: y = 0 x = x + 1 else: y = y + 1
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor