TP2 and TP2-Optionnel finish start of steganographie
6
.idea/A2.iml
generated
@@ -1,8 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module type="PYTHON_MODULE" version="4">
|
<module type="PYTHON_MODULE" version="4">
|
||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$" />
|
<content url="file://$MODULE_DIR$">
|
||||||
<orderEntry type="inheritedJdk" />
|
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.11 (A2)" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PyDocumentationSettings">
|
<component name="PyDocumentationSettings">
|
||||||
|
|||||||
5
.idea/misc.xml
generated
@@ -1,4 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<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>
|
</project>
|
||||||
8
TP1/.idea/.gitignore
generated
vendored
@@ -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
@@ -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
@@ -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>
|
|
||||||
@@ -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
@@ -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
@@ -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
@@ -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>
|
|
||||||
20
TP1/tp1.py
@@ -1,11 +1,11 @@
|
|||||||
def celsius_fahrenheit(celcius):
|
def celsius_fahrenheit(celsius):
|
||||||
return celcius * 9 / 5 + 32
|
return celsius * 9 / 5 + 32
|
||||||
|
|
||||||
|
|
||||||
def mention(note):
|
def mention(note):
|
||||||
if note < 0:
|
if note < 0:
|
||||||
return "Note hors échelle"
|
return "Note hors échelle"
|
||||||
if note < 10:
|
elif note < 10:
|
||||||
return "Insuffisant"
|
return "Insuffisant"
|
||||||
elif note < 12:
|
elif note < 12:
|
||||||
return "Passable"
|
return "Passable"
|
||||||
@@ -49,13 +49,13 @@ def occurrences_lettres(mot):
|
|||||||
return {c: mot.count(c) for c in mot}
|
return {c: mot.count(c) for c in mot}
|
||||||
|
|
||||||
|
|
||||||
points_lettres = {
|
points_lettres_scrabble = {
|
||||||
1 : ["E", "A", "I", "N", "O", "R", "S", "T", "U", "L"],
|
1: ["E", "A", "I", "N", "O", "R", "S", "T", "U", "L"],
|
||||||
2 : ["D", "M", "G"],
|
2: ["D", "M", "G"],
|
||||||
3 : ["B", "C", "P"],
|
3: ["B", "C", "P"],
|
||||||
4 : ["F", "H", "V"],
|
4: ["F", "H", "V"],
|
||||||
8 : ["J", "Q"],
|
8: ["J", "Q"],
|
||||||
10 : ["K", "W", "X", "Y", "Z"]
|
10: ["K", "W", "X", "Y", "Z"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
BIN
TP2/hiddenImage1.png
Normal file
|
After Width: | Height: | Size: 448 KiB |
BIN
TP2/hiddenImage2.png
Normal file
|
After Width: | Height: | Size: 234 KiB |
BIN
TP2/hiddenImage3.png
Normal file
|
After Width: | Height: | Size: 467 KiB |
BIN
TP2/hiddenImage4.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
TP2/hiddenText1.png
Normal file
|
After Width: | Height: | Size: 451 KiB |
BIN
TP2/hiddenText2.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
TP2/hiddenText3.png
Normal file
|
After Width: | Height: | Size: 451 KiB |
BIN
TP2/hiddenText4.png
Normal file
|
After Width: | Height: | Size: 456 KiB |
BIN
TP2/lena.png
Normal file
|
After Width: | Height: | Size: 391 KiB |
BIN
TP2/lena_miror.png
Normal file
|
After Width: | Height: | Size: 392 KiB |
32
TP2/main.py
Normal 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
@@ -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
@@ -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
|
||||||
|
|
||||||