Cranraspberry (talk) 04:21, 24 April 2009 (UTC)
The steps needed to reproduce this (on linux) follow (a friend just asked me how ;).
wget http://upload.wikimedia.org/wikipedia/commons/4/4e/StenographyOriginal.png
convert StenographyOriginal.png SO.bmp
>>> f = open("SO.bmp", "r") # Open the file
>>> b = "".join(x for x in f) # Read the file into a binary string
>>> ] # Find the end of the header (see ] for details)
>>> h = b # h is now the BMP header
>>> t = b # t is now the BMP data
>>> k = # k is now an array of the image data for the "nearly black" image
>>> j = # j is now an array of the bytes for the cat image
>>> g = open("cat.bmp", "w") # open a new image for writing
>>> g.write(h) # old header should be alright, it's still going to have similar properties
>>> g.write("".join(j)) # write the new data
>>> exit()
convert cat.bmp cat.png
Hope this is useful - there may be a nicer way of doing it for GUI people, but I dunno. Conrad.Irwin (on wikt) 19:05, 26 May 2009 (UTC)
I have attempted to decode this steganographic image with PhotoShop. No luck. I would think you could do it with the following steps:
- Brighten image until all but the two LS bits of the image are clipped to white. - Darken to a medium gray. - Increase contrast to bring out image.
(The Equalize command might even do the last two steps automatically.)
When I do these steps, I find no hidden image. Does the PNG perhaps store the image with a channel depth of greater than 8 bits? If so, then the example really is not fair; Screens are displayed with a 8 bit channel depth. If the steg image is displayed in bits beyond those eight, they will be simply discarded by hardware. RastaKins (talk) 19:23, 2 August 2010 (UTC)