1
0
Fork 0
mirror of https://github.com/GeoffreyFrogeye/steginack.git synced 2024-05-05 19:41:46 +00:00
steginack/steginack.py

70 lines
2.2 KiB
Python
Raw Permalink Normal View History

2015-04-23 07:06:09 +00:00
#!/usr/bin/env python3
from PIL import Image
import argparse
2015-04-23 09:45:45 +00:00
def hideInFile(args):
inim = Image.open(args.infile)
hideim = Image.open(args.hidefile)
2015-04-23 07:06:09 +00:00
assert inim.size == hideim.size, "Both image must be of the same size"
2015-04-23 10:48:33 +00:00
bits = args.bits
assert 0 <= bits <= 8
2015-04-23 07:06:09 +00:00
outim = Image.new('RGB', inim.size)
2015-04-23 07:22:24 +00:00
for x in range(inim.size[0]):
for y in range(inim.size[1]):
incol = inim.getpixel((x, y))
2015-04-23 08:39:08 +00:00
hidecol = hideim.getpixel((x, y))
2015-04-23 07:22:24 +00:00
outcol = []
for cp in range(len(incol)):
2015-04-23 10:48:33 +00:00
inbyt = '{0:08b}'.format(incol[cp])
hidebyt = '{0:08b}'.format(hidecol[cp])
outbyt = inbyt[:8 - bits] + hidebyt[bits - 1::-1]
outcol.append(int(outbyt, 2))
2015-04-23 07:22:24 +00:00
outim.putpixel((x, y), tuple(outcol))
2015-04-23 07:06:09 +00:00
inim.close()
hideim.close()
2015-04-23 09:45:45 +00:00
outim.save(args.outfile, 'PNG')
2015-04-23 10:48:33 +00:00
outim.close()
2015-04-23 07:06:09 +00:00
2015-04-23 07:22:24 +00:00
2015-04-23 09:45:45 +00:00
def inverseFile(args):
inim = Image.open(args.infile)
2015-04-23 07:06:09 +00:00
outim = Image.new('RGB', inim.size)
2015-04-23 10:48:33 +00:00
xS, yS = inim.size[0], inim.size[1]
for x in range(xS):
for y in range(yS):
pos = (x, y)
incol = inim.getpixel(pos)
2015-04-23 08:39:08 +00:00
outcol = []
for cp in range(len(incol)):
2015-04-23 10:48:33 +00:00
inbyt = '{0:08b}'.format(incol[cp])
outbyt = inbyt[::-1]
outcol.append(int(outbyt, 2))
outim.putpixel(pos, tuple(outcol))
2015-04-23 07:06:09 +00:00
inim.close()
2015-04-23 09:45:45 +00:00
outim.save(args.outfile, 'PNG')
2015-04-23 10:48:33 +00:00
outim.close()
2015-04-23 07:06:09 +00:00
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Hide an image inside another and decode images")
2015-04-23 09:45:45 +00:00
2015-04-23 07:06:09 +00:00
parser.add_argument('infile', metavar='INFILE', type=str, help="Input file")
2015-04-23 09:45:45 +00:00
subparsers = parser.add_subparsers(dest='action')
subparsers.required = True
hidep = subparsers.add_parser('hide')
hidep.add_argument('hidefile', metavar='HIDEFILE', type=str, help="File to hide")
hidep.add_argument('bits', metavar='BITS', type=int, help="Number of bits to use for hiding")
hidep.set_defaults(func=hideInFile)
inversep = subparsers.add_parser('inverse')
inversep.set_defaults(func=inverseFile)
2015-04-23 07:06:09 +00:00
parser.add_argument('outfile', metavar='OUTFILE', type=str, help="Output file")
2015-04-23 09:45:45 +00:00
2015-04-23 07:06:09 +00:00
args = parser.parse_args()
2015-04-23 09:45:45 +00:00
args.func(args)