TP2 and TP2-Optionnel finish start of steganographie

This commit is contained in:
2024-01-29 10:51:38 +01:00
parent a5d132e1cd
commit 7e078c2a15
23 changed files with 135 additions and 62 deletions

6
.idea/A2.iml generated
View File

@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.11 (A2)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PyDocumentationSettings">

5
.idea/misc.xml generated
View File

@@ -1,4 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13 (DS_EST_Partiel_S3)" project-jdk-type="Python SDK" />
<component name="Black">
<option name="sdkName" value="Python 3.11 (A2)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (A2)" project-jdk-type="Python SDK" />
</project>

8
TP1/.idea/.gitignore generated vendored
View File

@@ -1,8 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

10
TP1/.idea/TP1.iml generated
View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

7
TP1/.idea/discord.xml generated
View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DiscordProjectSettings">
<option name="show" value="ASK" />
<option name="description" value="" />
</component>
</project>

View File

@@ -1,6 +0,0 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

4
TP1/.idea/misc.xml generated
View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (TP1)" project-jdk-type="Python SDK" />
</project>

8
TP1/.idea/modules.xml generated
View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/TP1.iml" filepath="$PROJECT_DIR$/.idea/TP1.iml" />
</modules>
</component>
</project>

6
TP1/.idea/vcs.xml generated
View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

View File

@@ -1,11 +1,11 @@
def celsius_fahrenheit(celcius):
return celcius * 9 / 5 + 32
def celsius_fahrenheit(celsius):
return celsius * 9 / 5 + 32
def mention(note):
if note < 0:
return "Note hors échelle"
if note < 10:
elif note < 10:
return "Insuffisant"
elif note < 12:
return "Passable"
@@ -49,13 +49,13 @@ def occurrences_lettres(mot):
return {c: mot.count(c) for c in mot}
points_lettres = {
1 : ["E", "A", "I", "N", "O", "R", "S", "T", "U", "L"],
2 : ["D", "M", "G"],
3 : ["B", "C", "P"],
4 : ["F", "H", "V"],
8 : ["J", "Q"],
10 : ["K", "W", "X", "Y", "Z"]
points_lettres_scrabble = {
1: ["E", "A", "I", "N", "O", "R", "S", "T", "U", "L"],
2: ["D", "M", "G"],
3: ["B", "C", "P"],
4: ["F", "H", "V"],
8: ["J", "Q"],
10: ["K", "W", "X", "Y", "Z"]
}

BIN
TP2/hiddenImage1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 KiB

BIN
TP2/hiddenImage2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

BIN
TP2/hiddenImage3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 KiB

BIN
TP2/hiddenImage4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
TP2/hiddenText1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

BIN
TP2/hiddenText2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
TP2/hiddenText3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

BIN
TP2/hiddenText4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 KiB

BIN
TP2/lena.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 KiB

BIN
TP2/lena_miror.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

32
TP2/main.py Normal file
View File

@@ -0,0 +1,32 @@
from tp2 import *
from tp2_optionnel import *
def __main__():
fond_bleu = Image.new("RGB", (450, 300), (0, 0, 255))
fond_bleu.show()
drapeau_fr = creer_drapeau_francais()
drapeau_fr.show()
degrade_vertical = creer_degrade_vertical()
degrade_vertical.show()
lena = Image.open("lena.png")
lena.show()
print(lena.size)
r, g, b = lena.getpixel((0,0))
print(r, g, b)
lena_miror = miroir(lena)
lena_miror.show()
lena_miror.save("lena_miror.png")
lena_negatif = negatif(lena)
lena_negatif.show()
lena_niveaux_gris = niveaux_gris(lena)
lena_niveaux_gris.show()
lena_tournee = rotation90(lena, True)
lena_tournee.show()
lena_tournee = rotation90(lena, False)
lena_tournee.show()
lena_contours = contours(lena, 50)
lena_contours.show()
if __name__ == "__main__":
__main__()

30
TP2/tp2.py Normal file
View File

@@ -0,0 +1,30 @@
from PIL import Image
def creer_drapeau_francais():
img = Image.new("RGB", (450, 300), (255, 255, 255))
for x in range(150):
for y in range(300):
img.putpixel((x, y), (0, 0, 255))
for x in range(300, 450):
for y in range(300):
img.putpixel((x, y), (255, 0, 0))
return img
def creer_degrade_vertical():
img = Image.new("RGB", (300, 300), (0, 0, 0))
for x in range(300):
for y in range(300):
img.putpixel((y, x), (x, x, x))
return img
def miroir(image):
largeur, hauteur = image.size
img = Image.new("RGB", (largeur, hauteur), (0, 0, 0))
for x in range(largeur):
for y in range(hauteur):
r, g, b = image.getpixel((x, y))
img.putpixel((largeur - x - 1, y), (r, g, b))
return img

55
TP2/tp2_optionnel.py Normal file
View File

@@ -0,0 +1,55 @@
from PIL import Image
def negatif(image):
largeur, hauteur = image.size
img = Image.new("RGB", (largeur, hauteur), (0, 0, 0))
for x in range(largeur):
for y in range(hauteur):
r, g, b = image.getpixel((x, y))
img.putpixel((x, y), (255 - r, 255 - g, 255 - b))
return img
def niveaux_gris(image):
largeur, hauteur = image.size
img = Image.new("RGB", (largeur, hauteur), (0, 0, 0))
for x in range(largeur):
for y in range(hauteur):
r, g, b = image.getpixel((x, y))
gris = (r + g + b) // 3
img.putpixel((x, y), (gris, gris, gris))
return img
def rotation90(image, sens_trigo):
largeur, hauteur = image.size
img = Image.new("RGB", (hauteur, largeur), (0, 0, 0))
for x in range(largeur):
for y in range(hauteur):
r, g, b = image.getpixel((x, y))
if sens_trigo :
img.putpixel((hauteur - y - 1, x), (r, g, b))
else :
img.putpixel((y, largeur - x - 1), (r, g, b))
return img
def contours(image, s):
largeur, hauteur = image.size
img = Image.new("RGB", (largeur, hauteur), (255, 255, 255))
for x in range(largeur):
for y in range(hauteur):
r, g, b = image.getpixel((x, y))
if x == 0 or x == largeur - 1 or y == 0 or y == hauteur - 1:
img.putpixel((x, y), (r, g, b))
else:
r1, g1, b1 = image.getpixel((x - 1, y))
r2, g2, b2 = image.getpixel((x + 1, y))
r3, g3, b3 = image.getpixel((x, y - 1))
r4, g4, b4 = image.getpixel((x, y + 1))
if abs(r - r1) > s or abs(r - r2) > s or abs(r - r3) > s or abs(r - r4) > s:
img.putpixel((x, y), (0, 0, 0))
else:
img.putpixel((x, y), (255, 255, 255))
return img