Créer image PGM

Résolu
Bonjour à tous.

Je dois créer une image pgm sous python.
Voici mon code:
#je cree un fichier pgm
def cree_image(fichier):
 fichier=open(fichier,"w") 
# pour specifier que je vais creer une image en niveaux de gris
 fichier.write("P2\n")
# de 800 pixels sur 800 pixels
 fichier.write("800 800\n")
# chacune des valeurs de 0 a 255 correspond a un niveau de gris
 fichier.write("255\n")
# pour chacun des 800 x 800 pixel de l image je lui affecte un nombre egal au carré de la distance de ce point au point origine
 for j in range (0,800): 
# je calcule modulo 255 pour se ramener dans l intervalle 0 255
  for i in range (0,800):
   fichier.write(str((i**2+j**2)%255)) 
  fichier.write("\n’")
 fichier.close()
cree_image("resultat.pgm")


Je suis censé obtenir cela:


mais à la place j'ai un fichier pgm inexploitable.
Je ne vois pas où est mon erreur car le programme s'exécute sans erreur.

Merci pour l'aide apportée.

Configuration: Linux / Firefox 99.0


“Il est hélas devenu évident aujourd'hui que notre technologie a dépassé notre humanité.” Albert Einstein

2 réponses

  1. Modérateur
    Re bonjour bendrop,

    Voici comment j'aurais écrit ton programme (et là, le résultat est correct) :

    #!/usr/bin/env python3
    
    import sys
    
    def write_pgm(filename, w=800, h=800, n=255):
        with open(filename, "w") as f:
            print(   
                "\n".join([
                    "P2",    
                    " ".join([str(w), str(h)]),
                    str(n),  
                    "\n".join(
                        " ".join(
                            str((i ** 2 + j ** 2) % n)
                            for j in range(w) 
                        )        
                        for i in range(h) 
                    )        
                ]),      
                file=f   
            )
    
    write_pgm("resultat.pgm")


    Je te laisse comparer le résultat obtenu avec les deux programmes pour comprendre où est ton erreur.

    Bonne chance
    1. Contributeur
      Merci mamiemando,

      Je regarderai cela de près.

      Cordialement.
  2. Modérateur
    Bonjour,

    Si tu ouvres ton fichier, tu comprendras le problème ;
    • Il manque des espaces entre les valeurs assignées à chacun de tes pixels.


    Par ailleurs, tu peux améliorer ton programme comme suit
    • Pour ouvrir et fermer le fichier, il vaudrait mieux utiliser un context manager (en python :
      with open("resultat.pgm") as f:
      )
    • Pour écrire dans ton fichier, tu peux directement utiliser ton descripteur de fichier avec
      print
      :
      print("plop", file=f)
      ). Il est possible d'omettre le retour chariot en cas de besoin (
      print("plop", end="")
      ).


    Le fichier devient exploitable avec la première correction, mais même si le rendu ressemble à ce que tu attends, ce n'est pas le résultat que tu attends. Vérifie qu'il y a le bon nombre de valeurs pour chaque ligne.

    Bonne chance
    1. Contributeur
      Merci mamiemando,

      Je verrai cela demain ou après demain et je reviendrai dire ce qu’il en est.

      Cdlt.