mirror of
https://github.com/BreizhHardware/py_A2.git
synced 2026-03-18 21:30:52 +01:00
stenographie continue but not end
This commit is contained in:
22
TP2/main.py
22
TP2/main.py
@@ -1,7 +1,10 @@
|
||||
from tp2 import *
|
||||
from tp2_optionnel import *
|
||||
from tp_steganographie import *
|
||||
|
||||
|
||||
def __main__():
|
||||
'''x
|
||||
fond_bleu = Image.new("RGB", (450, 300), (0, 0, 255))
|
||||
fond_bleu.show()
|
||||
drapeau_fr = creer_drapeau_francais()
|
||||
@@ -11,7 +14,7 @@ def __main__():
|
||||
lena = Image.open("lena.png")
|
||||
lena.show()
|
||||
print(lena.size)
|
||||
r, g, b = lena.getpixel((0,0))
|
||||
r, g, b = lena.getpixel((0, 0))
|
||||
print(r, g, b)
|
||||
lena_miror = miroir(lena)
|
||||
lena_miror.show()
|
||||
@@ -26,7 +29,22 @@ def __main__():
|
||||
lena_tournee.show()
|
||||
lena_contours = contours(lena, 50)
|
||||
lena_contours.show()
|
||||
print(getHiddenTextWithDelimiter(hiddenText1, "\0"))
|
||||
print(getHiddenTextWithDelimiter(hiddenText2, "\0"))
|
||||
print(getHiddenTextOfLength(hiddenText3, 4))
|
||||
print(getHiddenTextOfLength(hiddenText4, 16))
|
||||
'''
|
||||
hidden1 = getHiddenImage(hiddenImage1, 8)
|
||||
hidden1.show()
|
||||
hidden2 = getHiddenImage(hiddenImage2, 8)
|
||||
hidden2.show()
|
||||
'''
|
||||
hidden3 = getHiddenImageInLastBits(hiddenImage3, 8, 2)
|
||||
hidden3.show()
|
||||
hidden4 = getHiddenImageInLastBits(hiddenImage4, 16, 2)
|
||||
hidden4.show()
|
||||
'''
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
__main__()
|
||||
__main__()
|
||||
|
||||
@@ -1,21 +1,93 @@
|
||||
from PIL import Image
|
||||
|
||||
|
||||
def getHiddenTextWithDelimiter(image, delimiter="\0"):
|
||||
pixel = list(image.getdata())
|
||||
hidden_bits = []
|
||||
for i in range(len(pixel)):
|
||||
hidden_bits.append(str(pixel[i][0] & 1))
|
||||
binary_string = ''.join(hidden_bits)
|
||||
octets = [binary_string[i:i + 8] for i in range(0, len(binary_string), 8)]
|
||||
ascii_characters = ''.join([chr(int(octet, 2)) for octet in octets])
|
||||
hidden_text = ascii_characters.split(delimiter)[0]
|
||||
return hidden_text.split(delimiter)[0]
|
||||
hiddenText1 = Image.open("hiddenText1.png")
|
||||
hiddenText2 = Image.open("hiddenText2.png")
|
||||
hiddenText3 = Image.open("hiddenText3.png")
|
||||
hiddenText4 = Image.open("hiddenText4.png")
|
||||
hiddenImage1 = Image.open("hiddenImage1.png")
|
||||
hiddenImage2 = Image.open("hiddenImage2.png")
|
||||
hiddenImage3 = Image.open("hiddenImage3.png")
|
||||
hiddenImage4 = Image.open("hiddenImage4.png")
|
||||
|
||||
|
||||
print("Image 1")
|
||||
image = Image.open('hiddenText1.png')
|
||||
print(getHiddenTextWithDelimiter(image))
|
||||
print("Image 2")
|
||||
image = Image.open('hiddenText2.png')
|
||||
print(getHiddenTextWithDelimiter(image))
|
||||
def imageToArray(image):
|
||||
array = []
|
||||
for pixel in image.getdata():
|
||||
array.append(pixel[0])
|
||||
array.append(pixel[1])
|
||||
array.append(pixel[2])
|
||||
return array
|
||||
|
||||
|
||||
def getLength(imageArray, nbBitsForLength, index=0):
|
||||
length, i = 0, nbBitsForLength - 1
|
||||
for len in range(index, index + nbBitsForLength):
|
||||
length += imageArray[len] % 2 * (2 ** i)
|
||||
i -= 1
|
||||
return length
|
||||
|
||||
|
||||
def getChar(imageArray, index):
|
||||
binN, i = 0, 6
|
||||
for j in range(index, index + 7):
|
||||
binN += (imageArray[j] % 2) * (2 ** i)
|
||||
i -= 1
|
||||
return chr(binN)
|
||||
|
||||
|
||||
def getHiddenTextWithDelimiter(image, delimiter):
|
||||
imageArray = imageToArray(image)
|
||||
hiddenText = ""
|
||||
i = 0
|
||||
while getChar(imageArray, i) != delimiter:
|
||||
hiddenText += getChar(imageArray, i)
|
||||
i += 7
|
||||
return hiddenText
|
||||
|
||||
|
||||
def getHiddenTextOfLength(image, nbBitsForLength):
|
||||
imageArray = imageToArray(image)
|
||||
hiddenText = ""
|
||||
for i in range(nbBitsForLength, ((getLength(imageArray, nbBitsForLength) * 7) + nbBitsForLength), 7):
|
||||
hiddenText += getChar(imageArray, i)
|
||||
return hiddenText
|
||||
|
||||
|
||||
def getLenghtTuple(imageArray, nbBitsForLength, index=0):
|
||||
length = 0, nbBitsForLength - 1
|
||||
i = nbBitsForLength - 1
|
||||
while i >= 0:
|
||||
length += imageArray[index] % 2 * (2 ** i)
|
||||
i -= 1
|
||||
index += 1
|
||||
print(length)
|
||||
return length
|
||||
|
||||
|
||||
def imageToArrayTuple(image):
|
||||
array = []
|
||||
for pixel in image.getdata():
|
||||
array.append((pixel[0], pixel[1], pixel[2]))
|
||||
return array
|
||||
|
||||
|
||||
def getHiddenImage(image, nbBitsForSize):
|
||||
imageArray = imageToArrayTuple(image)
|
||||
print(imageArray[0:10])
|
||||
width = getLenghtTuple(imageArray, nbBitsForSize)
|
||||
height = getLenghtTuple(imageArray, nbBitsForSize, nbBitsForSize * 2)
|
||||
print(width)
|
||||
print(height)
|
||||
totalPixel = width * height * 3
|
||||
hiddenImagePixel = [imageArray[i:i + 3] for i in range(nbBitsForSize * 2, nbBitsForSize * 2 + totalPixel, 3)]
|
||||
hiddenImagePixel = [value for pixel in hiddenImagePixel for value in pixel]
|
||||
hiddenImagePixel = [(hiddenImagePixel[i], hiddenImagePixel[i + 1], hiddenImagePixel[i + 2]) for i in
|
||||
range(0, len(hiddenImagePixel), 3)]
|
||||
hiddenImage = Image.new("RGB", (width, height))
|
||||
hiddenImage.putdata(hiddenImagePixel)
|
||||
return hiddenImage
|
||||
|
||||
|
||||
def getHiddenImageInLastBits(image, nbBitsForSize, nbLastBits):
|
||||
#To Do
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user