Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
AP-WALLOT-Angy
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Angy Wallot
AP-WALLOT-Angy
Commits
8d017801
Commit
8d017801
authored
1 year ago
by
Angy Wallot
Browse files
Options
Downloads
Patches
Plain Diff
classe
parent
084a1aa3
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
projet/classe.py
+77
-42
77 additions, 42 deletions
projet/classe.py
projet/decoupe_im.py
+4
-39
4 additions, 39 deletions
projet/decoupe_im.py
with
81 additions
and
81 deletions
projet/classe.py
+
77
−
42
View file @
8d017801
from
PIL
import
Image
,
ImageDraw
from
decoupe_im
import
*
im
=
Image
.
open
(
'
images/calbuth.png
'
)
im_rgb
=
im
.
convert
(
'
RGB
'
)
class
Bloc
:
def
__init__
(
self
,
*
arg
):
def
__init__
(
self
,
*
arg
s
):
"""
Creer un bloc contenant des arguments variables
Exemple(s) :
$$$
§§§ b1 = Bloc((18,14), True, (255,255,255))
§§§ b1
Bloc(
'
True
'
'
(18, 14)
'
,
'
(255, 255, 255)
'
)
§§§ b2 = Bloc((52, 86), False)
§§§ b2
Bloc(
'
False
'
'
(52, 86)
'
)
"""
assert
len
(
args
)
>=
2
and
len
(
args
)
<=
3
,
#2 ou 3 arguments car la taille et l'uniforlité sont nécessaire
assert
type
(
args
[
0
])
==
tuple
,
"
la taille
doit être un tuple contenant 2 nombres
"
assert
len
(
args
)
>=
2
and
len
(
args
)
<=
3
#2 ou 3 arguments car la taille et l'uniforlité sont nécessaire
assert
type
(
args
[
0
])
==
tuple
#
la taille
correspond à un tuple avec deux nombres, le premier etant le pixel en haut à droite et en bas à droite
self
.
taille
=
args
[
0
]
assert
type
(
args
[
1
])
==
bool
,
"
l
'
uniformité doit être un booléen
"
assert
type
(
args
[
1
])
==
bool
self
.
uni
=
args
[
1
]
if
len
(
args
)
>
2
:
class
Person
:
def
__init__
(
self
,
*
args
):
"""
initialise une nouvelle personne.
"""
assert
len
(
args
)
>=
1
and
len
(
args
)
<=
3
,
"
1, 2 ou 3 arguments
"
assert
type
(
args
[
0
])
==
str
,
"
le nom doit être une chaîne de caractères
"
self
.
nom
=
args
[
0
]
if
len
(
args
)
>
1
:
assert
type
(
args
[
1
])
==
str
,
"
le prénom doit être une chaîne de caractères
"
self
.
prenom
=
args
[
1
]
if
len
(
args
)
>
2
and
self
.
uni
==
True
:
assert
type
(
args
[
2
])
==
tuple
self
.
couleur
=
args
[
2
]
else
:
self
.
prenom
=
""
if
len
(
args
)
>
2
:
assert
type
(
args
[
2
])
==
int
,
"
le numéro de téléphone doir être un entier
"
self
.
tel
=
args
[
2
]
else
:
self
.
tel
=
-
1
self
.
couleur
=
(
0
,
0
,
0
)
def
__repr__
(
self
)
->
str
:
"""
renvoie la représentation de la personne.
Renvoie la representation d
'
un bloc
Exemples:
§§§ b1 = Bloc((18,14), True, (255,255,255))
§§§ b1
Bloc(
'
True
'
'
(18, 14)
'
,
'
(255, 255, 255)
'
)
"""
p_args
=
f
"'
{
self
.
nom
}
'"
if
self
.
prenom
!=
""
:
p_args
+=
f
"
,
'
{
self
.
prenom
}
'"
if
self
.
tel
>=
0
:
p_args
+=
f
"
,
{
self
.
tel
}
"
return
f
"
Person(
{
p_args
}
)
"
def
__str__
(
self
)
->
str
:
"""
renvoie une repésentation textuelle de la personne
p_args
=
f
"'
{
self
.
uni
}
'
'
{
self
.
taille
}
'"
if
self
.
couleur
!=
(
0
,
0
,
0
):
p_args
+=
f
"
,
'
{
self
.
couleur
}
'"
return
f
"
Bloc(
{
p_args
}
)
"
def
get_taille
(
self
):
"""
à_remplacer_par_ce_que_fait_la_fonction
Précondition :
Exemple(s) :
$$$ p = Bloc((56,85), False)
$$$ p.get_taille()
(56,85)
"""
res
=
self
.
nom
if
self
.
prenom
!=
""
:
res
=
f
"
{
self
.
prenom
}
{
res
}
"
if
self
.
tel
>=
0
:
res
=
f
"
{
res
}
,
{
self
.
tel
}
"
return
res
return
self
.
taille
def
decouper_image
(
im
,
ordre
,
taille
):
"""
Fonction qui ...
Précondition : im doit etre convertit en rgb
"""
if
ordre
!=
0
:
b1_taille
=
((
0
,
0
),(
taille
[
0
]
//
2
,
taille
[
1
]
//
2
))
# coordonnées correspondant respectivement à en haut à gaucge et en bas à droite
b2_taille
=
((
taille
[
0
]
//
2
,
0
),(
taille
[
0
],
taille
[
1
]
//
2
))
b3_taille
=
((
0
,
taille
[
1
]
//
2
),(
taille
[
0
]
//
2
,
taille
[
1
]))
b4_taille
=
((
taille
[
0
]
//
2
,
taille
[
1
]
//
2
),(
taille
[
0
],
taille
[
1
]))
couleur_im
=
couleurs_moyenne
(
liste_couleur
(
im
,
(
0
,
0
),
taille
))
couleur_b1
=
couleurs_moyenne
(
liste_couleur
(
im
,
b1_taille
[
0
],
b1_taille
[
1
]))
couleur_b2
=
couleurs_moyenne
(
liste_couleur
(
im
,
b2_taille
[
0
],
b2_taille
[
1
]))
couleur_b3
=
couleurs_moyenne
(
liste_couleur
(
im
,
b3_taille
[
0
],
b3_taille
[
1
]))
couleur_b4
=
couleurs_moyenne
(
liste_couleur
(
im
,
b4_taille
[
0
],
b4_taille
[
1
]))
bloc1
=
Bloc
(
b1_taille
,
True
,
couleur_b1
)
# coordonnées correspondant respectivement à en haut à gaucge et en bas à droite
bloc2
=
Bloc
(
b2_taille
,
True
,
couleur_b2
)
bloc3
=
Bloc
(
b3_taille
,
True
,
couleur_b3
)
bloc4
=
Bloc
(
b4_taille
,
True
,
couleur_b4
)
liste
=
[
bloc1
,
bloc2
,
bloc3
,
bloc4
]
for
element
in
liste
:
decouper_image
(
element
,
ordre
-
1
,
element
.
get_taille
())
if
distance_entre_deux_images
(
couleur_im
,
couleur_b1
)
and
distance_entre_deux_images
(
couleur_im
,
couleur_b2
)
and
distance_entre_deux_images
(
couleur_im
,
couleur_b3
)
and
distance_entre_deux_images
(
couleur_im
,
couleur_b4
):
res
=
Bloc
((
taille
,
True
,
couleurs_moyenne
[
couleur_b1
,
couleur_b2
,
couleur_b3
,
couleur_b4
],
taille
))
else
:
res
=
Bloc
((
taille
,
False
))
else
:
res
=
Bloc
(
taille
,
True
,
couleur_im
)
return
res
decouper_image
(
im_rgb
,
2
,
(
256
,
256
))
\ No newline at end of file
This diff is collapsed.
Click to expand it.
projet/decoupe
im.py
→
projet/decoupe
_
im.py
+
4
−
39
View file @
8d017801
from
PIL
import
Image
,
ImageDraw
def
decoupe_image
(
im
,
ordre
:
int
):
"""
Précondition :
Exemple(s) :
$$$
"""
if
ordre
!=
0
:
taille
=
im
.
size
creer
bloc1
=
((
0
,
0
),(
taille
[
0
]
//
2
,
taille
[
1
]
//
2
))
# coordonnées correspondant respectivement à en haut à gaucge et en bas à droite
creer
bloc2
=
((
taille
[
0
]
//
2
,
0
),(
taille
,
taille
[
1
]
//
2
))
creer
bloc3
=
((
0
,
taille
[
1
]
//
2
),(
taille
[
0
]
//
2
,
taille
))
creer
bloc4
=
((
taille
[
0
]
//
2
,
taille
[
1
]
//
2
),(
taille
,
taille
))
decoupe_image
(
avec
les
blocs
im
,
ordre
-
1
)
couleur_im
=
couleurs_moyenne
(
liste_couleur
(
im
,
taille
[
0
],
taille
[
1
]))
couleur_b1
=
couleurs_moyenne
(
liste_couleur
(
im
,
bloc1
[
0
],
bloc1
[
1
]))
couleur_b2
=
couleurs_moyenne
(
liste_couleur
(
im
,
bloc2
[
0
],
bloc2
[
1
]))
couleur_b3
=
couleurs_moyenne
(
liste_couleur
(
im
,
bloc3
[
0
],
bloc3
[
1
]))
couleur_b4
=
couleurs_moyenne
(
liste_couleur
(
im
,
bloc4
[
0
],
bloc4
[
1
]))
if
distance_entre_deux_images
(
couleur_im
,
couleur_b1
)
and
distance_entre_deux_images
(
couleur_im
,
couleur_b2
)
and
distance_entre_deux_images
(
couleur_im
,
couleur_b3
)
and
distance_entre_deux_images
(
couleur_im
,
couleur_b4
):
res
=
creer
bloc
(
couleurs_moyenne
[
couleur_b1
,
couleur_b2
,
couleur_b3
,
couleur_b4
],
taille
)
else
:
res
=
creer
bloc
avec
les
4
blocs
?
else
:
res
=
creer
bloc
(
couleur_im
,
taille
)
from
PIL
import
Image
,
ImageDraw
def
couleurs_moyenne
(
liste
:
list
[
tuple
])
->
list
:
"""
...
...
@@ -43,7 +12,6 @@ def couleurs_moyenne(liste:list[tuple])->list:
[85, 85, 85]
"""
res
=
[]
r
=
0
g
=
0
b
=
0
...
...
@@ -51,10 +19,7 @@ def couleurs_moyenne(liste:list[tuple])->list:
r
+=
element
[
0
]
g
+=
element
[
1
]
b
+=
element
[
2
]
res
.
append
(
r
//
len
(
liste
))
res
.
append
(
g
//
len
(
liste
))
res
.
append
(
b
//
len
(
liste
))
return
res
return
((
r
//
len
(
liste
)),
(
g
//
len
(
liste
))
,(
b
//
len
(
liste
)))
def
liste_couleur
(
image
,
coin_haut_gauche
:
tuple
,
coin_bas_droit
:
tuple
)
->
list
:
"""
...
...
@@ -74,8 +39,8 @@ def liste_couleur(image, coin_haut_gauche:tuple,coin_bas_droit:tuple)->list:
x_min
,
y_min
=
coin_haut_gauche
x_max
,
y_max
=
coin_bas_droit
return
[
image
.
getpixel
((
x
,
y
))
for
x
in
range
(
x_min
,
x_max
+
1
)
for
y
in
range
(
y_min
,
y_max
+
1
)]
for
x
in
range
(
x_min
,
x_max
)
for
y
in
range
(
y_min
,
y_max
)]
def
distance_entre_deux_images
(
couleur1
:
tuple
,
couleur2
:
tuple
)
->
bool
:
"""
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment