TP2 and TP2-Optionnel finish start of steganographie
6
.idea/A2.iml
generated
@@ -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
@@ -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
@@ -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>
|
||||
@@ -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,7 +49,7 @@ def occurrences_lettres(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"],
|
||||
2: ["D", "M", "G"],
|
||||
3: ["B", "C", "P"],
|
||||
|
||||
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
|
||||
|
||||