IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Créer un damier avec PIL


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 1
    Points
    1
    Par défaut Créer un damier avec PIL
    Bonjour mon prof me demande créer un damier sur PIL ==> Python à partir de ce code !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    import os
    import PIL
    from PIL import Image
     
     
    #lecture du repertoir courant et création de test pil  dans ce repertoire
    #ce repertoire est defini comme repertoire de travail
     
    chemin = os.getcwd()  #lecture du repertoire courant
    nouvchemin=chemin+'\\test pil'
    if not os.path.isdir(nouvchemin):
        os.mkdir(nouvchemin)   # création de courant\test pil  s'il n'existe pas
    os.chdir(nouvchemin)       # définition du nouveau rep courant
     
     
    print(nouvchemin)
     
     
    import ImageDraw
     
     
    im = Image.new("RGB", (800,800), "#FFFFFF")
    draw = ImageDraw.Draw(im)
     
    def constligne(n):
        for k in range(4): #construction d'une ligne
            draw.rectangle(((2*k*100,n),((2*k+1)*100),n+100),fill="#000000")
     
     
     
     
    del draw
    im.save('cours.jpg', "JPEG")

    je ne sais pas du tout comment faire ! :/

  2. #2
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Bonjour,

    Par construction d'un damier, entends tu pixel par pixel ou des carré de plusieurs pixels de côté?

    Le code fournis par ton professeur dessine des carrés par ligne via la procedure constligne (doc ici: http://effbot.org/imagingbook/imagedraw.htm).

    Si tu analyse le code tu constatera que ce qui manque, c'est la partie gérant la disposition de ces lignes de cfarré en hauteur. C'est cette partie de code que tu dois principalement générer.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 1
    Points
    1
    Par défaut Python Damier fait maintenant ?
    Bonjour à tous je refait appel à ce forum car j'ai de grande difficulté en programmation.
    J'ai maintenant un damier pour faire un échiquier mais à présent il me faut affiché les lettres de chaque case sur les cotés du damier.
    Exemple: Voir pièce jointes

    Mon code est à présent cela ==> ca ne m'affiche que le damier sur l'image qui s'enregistre à chaque exécution.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    import os
    import PIL
    from PIL import Image
     
     
    #lecture du repertoir courant et création de test pil  dans ce repertoire
    #ce repertoire est defini comme repertoire de travail
     
    chemin = os.getcwd()  #lecture du repertoire courant
    nouvchemin=chemin+'\\test pil'
    if not os.path.isdir(nouvchemin):
        os.mkdir(nouvchemin)   # création de courant\test pil  s'il n'existe pas
    os.chdir(nouvchemin)       # définition du nouveau rep courant
     
     
    print(nouvchemin)
     
     
    import ImageDraw
     
     
    im = Image.new("RGB", (800,800), "#FFFFFF")
    draw = ImageDraw.Draw(im)
     
     
     
    def constligne(n):
        for i in range(8):
          offset = 100 * (i % 2)  # Permet de définir le commencement de la ligne par rapport au reste soit 0 ou 1
          for k in range(4):
                a = 200 * k + offset # Permet de définir les coordonées du point de départ d'un carré de mon damier
                draw.rectangle(((a, i*100), (a+100, i*100+100)), fill="#000000") #Coordonnées d'un carré d'un ligne par rapport au coordonées du premier
     
     
     
    constligne(10)
     
    del draw
    im.save('cours.jpg', "JPEG")

    Alors voila je vous remercie d'avance si un pro en algo et programmation passe par la ...... je lui laisse essaye de réfléchir a mes pointilles mais bon.
    Bon sinon messieurs bonne soirée à tous
    Images attachées Images attachées  

  4. #4
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Salut,

    Tu dois faire les choses en 2 temps. D'abord générer et enregistrer ton damier (deja fait). Dans un second temps, tu ajoute le texte. Pour cela, tout est dans PIL. Regarde plus precisement ImageDraw et ImageFont qui vont repondre à tes attentes.

    Dans ton cas, il y a cependant une petite difficultées supplémentaires. En effet, il faut prévoir l'espace sur le côté pour afficher le texte. La methode à suivre est dponc la suivante (en me basant sur ton existant):
    =>Generation du damier et sauvegarde
    =>Creation d'une image BIS correspondant à la taille de l'image precedemment générée + les espaces voulus
    =>Copie des pixels de l'image damiers dans la nouvelle image (regarde du coté de load dans PIL)
    =>Ajout de ton texte. Pour cela utilise ImageFont et ImageDraw dans PIL
    =>Sauvegarde finale
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 1
    Points
    1
    Par défaut :)
    Voila maintenant un petit bout de temps que je cherche comment superposer deux images...mais impossibles de trouvé :/
    ????

  6. #6
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Alors qu'entends tu par superposé?

    Deux solutions:
    => Tu veux vraiment faire une superposition. Dans ce cas l'image du dessus doit contenir un canal alpha (image PNG ou GIF) de transparence.
    => Tu veux juste empiler une image sur l'autre sans gestion de transparence. Dans ce cas, tu créé une copie de l'image arrière (il y a une fonction PIL pour cela), puis tu vient modifier les pixels avec ceux de ton image du dessus.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bon restons ici
    Eh, enfaite je veux mettre un fond blanc et placé mon damier au milieu pour par la suite placé les lettres et les chiffres sur le côté
    Merci
    Bonne journée.

  8. #8
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Salut,

    Dans ce cas la solution numero 2 te conviendra parfaitement. Utilise la fonction load() de PIL afin d'optimiser ton processus. Cette fonction va te renvoyer les composante des pixels. Il ne te restera plus alors qu'à redefinir les pixels qui t'interessent.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Ne peut tu pas me faire le code et par la suite je cherche a comprendre car la je cherche ce qu'est la fonction Load sauf que aucune infos trouvé es.
    Merci bonne soirée

  10. #10
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Salut,

    Sache que ce forum est fait pour l'entraide. Tu peux sans soucis demander de l'aide, mais pas demander du code ainsi. C'est cette raison qui fait que tes points sont positionnés à -1. Ton tout premier post semblait directement dire "donnez moi du code". Je pense qu'un membre n'a pas du apprécier.

    Passons. Donc si je ne te donnerai pas de code, je te donnerai des pistes et des explications. Viendrons en plus de l'aide si tu en exprime le besoins.

    Tout d'abord LOAD. C'est une fonction qui permet de récupérer d'un coup l'intégralité des composantes d'un pixel. La doc est ICI.

    Une fois que tu as tout lu, tu peux modifier les pixels d'une image tel qu'expliqué ICI.

    Tu as maintenant toutes les billes pour faire ta manip. Si tu as des questions, ont est bien sur present.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    load

    im.load()

    Allocates storage for the image and loads it from the file (or from the source, for lazy operations). In normal cases, you don’t need to call this method, since the Image class automatically loads an opened image when it is accessed for the first time.

    (New in 1.1.6) In 1.1.6 and later, load returns a pixel access object that can be used to read and modify pixels. The access object behaves like a 2-dimensional array, so you can do:

    pix = im.load()
    print pix[x, y]
    pix[x, y] = value

    Access via this object is a lot faster than getpixel and putpixel.

    Peut tu me traduire cela s'il te plait....
    Je suis lycéen et c'est ma première année d'ISN et je ne comprend pas tout voir pas énormément de chose en programmation
    J'ai beau cherché pendant une heure les solution, je ne trouve pas le résultat
    Merci, bonne journée.

  12. #12
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Je vais t'expliquer le code exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pix = im.load()
    print pix[x, y]
    pix[x, y] = value
    Il faut imaginer avoir precedemment ce code, avoir créer/ouvert une image, dans un objet nommé "im".

    L1, tu utilise la methode load, etu tu sotcke le resultat dans pix. pix est une matrice correspondant à l'image. Chaque pixel est désigné par ses coordonnée X, Y dans l'image. Chaque pixel est une composante allant jusqu'à RGB+alpha(transparence).

    Donc si tu fait un load, tu possède l'image sous forme de matrice., et avec un putpixel() tu peux definir un pixel donné. Tu as maintenant l'ensemble des methodes dont tu as besoin pour ce que tu veut faire:

    =>Creation d'un image 1, blanche, plus grande que le damier
    =>ouverture de l'image 2, ton damier
    =>Utilisation de load sur l'image 2
    =>Utilisation de putpixel sur l'image 1, en utilisant les composante récupéré via load. Tu effectues ainsi une copie de ton image 2 dans l'image 1.
    =>Tu ajoute le texte moyennant ImageDraw et ImageFont
    =>Tu sauvegarde l'image 1
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  13. #13
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 1
    Points : 3
    Points
    3
    Par défaut
    Bravo a Deusyss pour sa patience !
    Pour la demande et aucun merci ... que dire !

    Pour ma part je débute en Pillow merci du coup pour les informations du topic, ça va me servir

Discussions similaires

  1. Créer un gif annimé avec PIL
    Par Julien N dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 01/07/2014, 09h27
  2. Réponses: 3
    Dernier message: 21/09/2003, 15h52
  3. Créer un projet avec TurboC++
    Par Thrystan dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 06/09/2003, 17h32
  4. créer un noeuds avec des paramétres
    Par Toxine77 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 21/01/2003, 16h11
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo