@@ -181,35 +181,37 @@ def _ensure_logo_exists(png_path: Path):
181181 ico_path = png_path .with_suffix (".ico" )
182182
183183 if not png_path .exists ():
184- return # Si tu n'as pas le PNG, on ne peut rien faire
184+ return
185185
186186 try :
187- # 1. Ouvrir ton PNG original
187+ # On ouvre ton PNG
188188 img = Image .open (png_path ).convert ("RGBA" )
189189
190- # 2. "Auto-crop" : On enlève tout le vide transparent autour du logo
190+ # ÉTAPE CLÉ : On enlève les bordures vides si ton PNG en a
191191 bbox = img .getbbox ()
192192 if bbox :
193193 img = img .crop (bbox )
194194
195- # 3. Créer un canvas carré de 256x256 (Taille max Windows)
196- size = 256
197- new_img = Image .new ("RGBA" , (size , size ), (0 , 0 , 0 , 0 ))
195+ # On crée une liste des tailles standards Windows
196+ # La taille 256 est celle du bureau / La taille 32-48 est celle de la barre des tâches
197+ sizes = [256 , 128 , 64 , 48 , 32 , 16 ]
198+ layers = []
198199
199- # 4. Redimensionner ton logo pour qu'il touche presque les bords (98% de la taille)
200- inner_size = int (size * 0.98 )
201- img .thumbnail ((inner_size , inner_size ), Image .Resampling .LANCZOS )
200+ for s in sizes :
201+ # On redimensionne proprement pour chaque taille
202+ resized = img .resize ((s , s ), Image .Resampling .LANCZOS )
203+ layers .append (resized )
202204
203- # Centrer le logo sur le canvas
204- offset = (( size - img . size [ 0 ]) // 2 , ( size - img . size [ 1 ]) // 2 )
205- new_img . paste ( img , offset , img )
205+ # On sauvegarde l'ICO en incluant TOUTES ces couches
206+ # C'est ce qui garantit que l'icône "match" le PNG partout
207+ layers [ 0 ]. save ( ico_path , format = "ICO" , append_images = layers [ 1 :] )
206208
207- # 5. Sauvegarder par-dessus ton .ico avec TOUTES les tailles Windows
208- # C'est la couche (256, 256) qui rend l'icône "grande" sur le bureau
209- new_img . save ( ico_path , format = "ICO" , sizes = [( 256 , 256 ), ( 128 , 128 ), ( 64 , 64 ), ( 48 , 48 ), ( 32 , 32 ), ( 16 , 16 )] )
209+ print ( "ICO synchronisé avec le PNG (taille max)." )
210+ except Exception as e :
211+ print ( f"Erreur synchro : { e } " )
210212
211213 except Exception as e :
212- print (f"Erreur lors de l'optimisation de l'icône : { e } " )
214+ print (f"Erreur d'agrandissement de l'icône : { e } " )
213215
214216 def _show_main_window (self ):
215217 try : self .splash .destroy ()
0 commit comments