75 lines
1.9 KiB
Python
75 lines
1.9 KiB
Python
from PIL import Image
|
|
import bytes
|
|
|
|
TARGETIMAGE = 'Christmass.png'
|
|
FLAGIMAGE = 'WaldoFlag.png'
|
|
|
|
|
|
Target = Image.open(TARGETIMAGE)
|
|
Flag = Image.open(FLAGIMAGE)
|
|
|
|
newImg = Target.copy()
|
|
|
|
(TargetMaxX, TargetMaxY) = newImg.size
|
|
(FlagMaxX, FlagMaxY) = Flag.size
|
|
|
|
if ((TargetMaxX != FlagMaxX) or (TargetMaxX != FlagMaxX)):
|
|
raise Exception("This does not work with images of different sizes (yet)")
|
|
|
|
|
|
def Merge(OriginRGBA, TargetRGBA, numberOfBits=1):
|
|
OriginBytes = [bytes.int2byte(x) for x in OriginRGBA]
|
|
TargetBytes = [bytes.int2byte(x) for x in TargetRGBA]
|
|
newbytes = [0] * len(TargetBytes)
|
|
|
|
|
|
for i in range(len(OriginBytes)):
|
|
newbytes[i] = bytes.swapMSB2LSB(OriginBytes[i], TargetBytes[i], numberOfBits)
|
|
|
|
# print(OriginBytes, TargetBytes, newbytes)
|
|
|
|
return tuple([bytes.byte2int(b) for b in TargetBytes])
|
|
|
|
for y in range(FlagMaxY):
|
|
for x in range(FlagMaxX):
|
|
OriginRGBA = Flag.getpixel((x, y))
|
|
TargetRGBA = Target.getpixel((x, y))
|
|
|
|
newValues = Merge(OriginRGBA, TargetRGBA)
|
|
|
|
print('%s / %s X \t-\t %s / %s Y' % (x, FlagMaxX, y, FlagMaxY))
|
|
|
|
newImg.putpixel((x, y), newValues)
|
|
|
|
# Target.close()
|
|
# Flag.close()
|
|
|
|
print("saving")
|
|
newImg.save("Hidden.png")
|
|
print("done")
|
|
|
|
|
|
def extract(TargetRGBA, numberOfBits=1):
|
|
TargetBytes = [bytes.int2byte(x) for x in TargetRGBA]
|
|
newbytes = [0] * len(TargetBytes)
|
|
|
|
for i in range(len(TargetBytes)):
|
|
newbytes[i] = bytes.extractLSB(TargetBytes[i], numberOfBits)
|
|
# print(newbytes, end="\n")
|
|
|
|
return tuple([bytes.byte2int(b) for b in newbytes])
|
|
|
|
|
|
revert = newImg.copy()
|
|
|
|
for y in range(FlagMaxY):
|
|
for x in range(FlagMaxX):
|
|
print('%s / %s X \t-\t %s / %s' % (x, FlagMaxX, y, FlagMaxY))
|
|
|
|
# print([bytes.int2byte(x) for x in Flag.getpixel((x, y))], end="\t - \t")
|
|
|
|
revert.putpixel((x, y), extract(newImg.getpixel((x, y))))
|
|
|
|
# print("---\n")
|
|
|
|
revert.save("revert.png") |