Outils pour utilisateurs

Outils du site


issue87:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue87:python [2015/01/05 22:02] – [9] fredphil91issue87:python [2015/01/07 15:46] (Version actuelle) – [11] auntiee
Ligne 7: Ligne 7:
 The global ReadyToProcess variable is used to make sure that if the user presses the Process button, the system doesn’t try to process things without anything to process. We use the tkFileDialog askopenfilename built-in dialog routine to get the filename of the original image. We then get the number of colors in the original image as well as the width and height. We save those values and display them in the GUI. We then open the image and create a thumbnail image to display in the left image in the bottom frame. See the text box to the right.** The global ReadyToProcess variable is used to make sure that if the user presses the Process button, the system doesn’t try to process things without anything to process. We use the tkFileDialog askopenfilename built-in dialog routine to get the filename of the original image. We then get the number of colors in the original image as well as the width and height. We save those values and display them in the GUI. We then open the image and create a thumbnail image to display in the left image in the bottom frame. See the text box to the right.**
  
-Nous avons travaillé sur un générateur de motifs de point de croix. Le mois dernier, nous avons mis en place l'interface utilisateur, maintenant il est temps d'écrire le code qui fait le plus gros du travail. Le mois prochain, nous commencerons à travailler sur la partie qui crée le fichier PDF.+Depuis quelques mois, nous travaillons sur un générateur de motifs de point de croix. Le mois dernier, nous avons mis en place l'interface utilisateur, maintenant il est temps d'écrire le code qui fait le plus gros du travail. Le mois prochain, nous commencerons à travailler sur la partie qui crée le fichier PDF.
  
 Nous allons travailler d'abord sur les éléments de menu. Le code est ci-dessous. Nous allons travailler d'abord sur les éléments de menu. Le code est ci-dessous.
  
-La variable globale PretPourTraitement est utilisée pour s'assurer que si l'utilisateur appuie sur le bouton de traitement, le système ne va pas chercher à traiter s'il n'y a rien à traiter. Nous utilisons la  routine de dialogue askopenfilename intégrée à tkFileDialog pour obtenir le nom du fichier qui contient l'image originale. On obtient alors le nombre de couleurs de l'image originale ainsi que la largeur et la hauteur. Nous sauvons ces valeurs et les affichons dans l'interface graphique. Nous ouvrons ensuite l'image et créons une image miniature à afficher dans la partie gauche du cadre inférieur. Voyez la boîte de texte à droite.+La variable globale PretPourTraitement est utilisée pour s'assurer que si l'utilisateur appuie sur le bouton de traitement, le système ne va pas chercher à traiter des choses s'il n'y a rien à traiter. Nous utilisons la routine de dialogue askopenfilename intégrée à tkFileDialog pour obtenir le nom du fichier qui contient l'image originale. On obtient alors le nombre de couleurs de l'image originale ainsi que la largeur et la hauteur. Nous sauvons ces valeurs et les affichons dans l'interface graphique. Nous ouvrons ensuite l'image et créons une image miniature à afficher dans la partie gauche du cadre inférieur. La boîte de texte est montrée à droite.
  
 ====== 2 ====== ====== 2 ======
Ligne 43: Ligne 43:
 Nous avons une variable appelée PretPourTraitement (ci-dessous) juste au cas où l'utilisateur tente d'exécuter la fonction de traitement avant que l'image ne soit chargée. Nous avons une variable appelée PretPourTraitement (ci-dessous) juste au cas où l'utilisateur tente d'exécuter la fonction de traitement avant que l'image ne soit chargée.
  
-Nous pixelisons le fichier original à une matrice de pixels 5x5. Cela nous permet de réduire cette matrice 5X5 à une seule couleur. Nous réduisons ensuite les couleurs, récupérons largeur et hauteur de l'image traitée et réglons la taille pour que l'utilisateur puisse voir quelle sera la taille de l'image résultante.+Nous pixelisons le fichier original à une matrice de pixels 5x5. Cela nous permet de réduire cette matrice 5x5 à une seule couleur. Nous réduisons ensuite les couleurs, récupérons largeur et hauteur de l'image traitée et réglons la taille pour que l'utilisateur puisse voir quelle sera la taille de l'image résultante.
  
 ====== 4 ====== ====== 4 ======
Ligne 51: Ligne 51:
 self.im2=Image.open(Reduced) self.im2=Image.open(Reduced)
  
-self.im2.thumbnail((400,400))+<nowiki>self.im2.thumbnail((400,400))</nowiki>
  
 self.img3 = ImageTk.PhotoImage(self.im2) self.img3 = ImageTk.PhotoImage(self.im2)
Ligne 63: Ligne 63:
 self.im2=Image.open(Reduite) self.im2=Image.open(Reduite)
  
-self.im2.thumbnail((500,500))+<nowiki>self.im2.thumbnail((500,500))</nowiki>
  
 self.img3 = ImageTk.PhotoImage(self.im2) self.img3 = ImageTk.PhotoImage(self.im2)
Ligne 81: Ligne 81:
 self.im2 = Image.open('output2.png') self.im2 = Image.open('output2.png')
  
-self.im2.thumbnail((400,400))+<nowiki>self.im2.thumbnail((400,400))</nowiki>
  
 self.img3 = ImageTk.PhotoImage(self.im2) self.img3 = ImageTk.PhotoImage(self.im2)
Ligne 91: Ligne 91:
 self.GridImage = 'output2.png'** self.GridImage = 'output2.png'**
  
-Le code ci-dessus met l'image traitée dans l'image qui contiendra l'image traitée. La suite du code créer une grille afin que l'utilisateur ait la grille pour faire le point de croix.+Le code ci-dessus met l'image traitée dans l'image qui contiendra l'image traitée. La suite du code créera une grille afin que l'utilisateur ait la grille pour faire le point de croix.
  
 self.DessinerLignes(Reduite,5) self.DessinerLignes(Reduite,5)
Ligne 99: Ligne 99:
 self.im2 = Image.open('output2.png') self.im2 = Image.open('output2.png')
  
-self.im2.thumbnail((500,500))+<nowiki>self.im2.thumbnail((500,500))</nowiki>
  
 self.img3 = ImageTk.PhotoImage(self.im2) self.img3 = ImageTk.PhotoImage(self.im2)
Ligne 155: Ligne 155:
   return self.colors**   return self.colors**
  
-La fonction RecupererNbCouleurs utilise la méthode .getcolors pour obtenir le nombre de couleurs dans le fichier image. Nous devons utiliser 1600000 comme paramètre maxcolors parce que si l'image contient plus de 256 couleurs (ou ce que contient le paramètre), la méthode retourne « None ». Cette fonction est similaire à la fonction RecupererCouleurs sauf que RecupererCouleurs travaille avec une image déjà ouverte. Si vous utilisez RecupererNbCouleurs, vous devez passer un fichier non ouvert.+La fonction RecupererNbCouleurs utilise la méthode .getcolors pour obtenir le nombre de couleurs dans le fichier image. Nous devons utiliser 1600000 comme paramètre maxcolors parce quesi l'image contient plus de 256 couleurs (ou ce que contient le paramètre), la méthode retourne « None ». Cette fonction est similaire à la fonction RecupererCouleurs sauf que RecupererCouleurs travaille avec une image déjà ouverte. Si vous utilisez RecupererNbCouleurs, vous devez passer un fichier non ouvert.
  
 def RecupererNbCouleurs(self,fichier): def RecupererNbCouleurs(self,fichier):
Ligne 176: Ligne 176:
   return im.size[0],im.size[1]**   return im.size[0],im.size[1]**
    
-Les deux fonctions suivantes renvoient la hauteur et la largeur du fichier image en pixels. La différence entre les deux est que RecupererHauteurLargeur renvoie une chaîne comme 1024x768 et RecupererHauteurLargeur2 renvoie deux nombres entiers.+Les deux fonctions suivantes renvoient la hauteur et la largeur en pixels du fichier image. La différence entre les deux est que RecupererHauteurLargeur renvoie une chaîne comme 1024x768 et RecupererHauteurLargeur2 renvoie deux nombres entiers.
  
 def RecupererHauteurLargeur(self,fichier): def RecupererHauteurLargeur(self,fichier):
Ligne 203: Ligne 203:
   couleurs = len(nbCouleurs)       couleurs = len(nbCouleurs)    
  
-La fonction Pixeliser (ci-dessus) prend deux paramètres, le nom du fichier image (im) et la taille des pixels que vous voulez. Le travail est effectué par la méthode image.resize. J'ai trouvé cette routine sur le web à pas mal d'endroits. Dans cet exemple, nous allons passer une taille de pixel de 5, qui fonctionne bien pour des projets de point de croix. Nous disons aussi à la méthode de prendre la couleur du plus proche voisin. Cela renvoie une nouvelle image, que nous enregistrons dans un fichier et retournons le nom de ce fichier.+La fonction Pixeliser (ci-dessus) prend deux paramètres, le nom du fichier image (im) et la taille des pixels que vous voulez. Le travail est effectué par la méthode image.resize. J'ai trouvé cette routine sur le Web à pas mal d'endroits. Dans cet exemple, nous allons passer une taille de pixel de 5, qui fonctionne bien pour des projets de point de croix. Nous disons aussi à la méthode de prendre la couleur du plus proche voisin. Cela renvoie une nouvelle image, que nous enregistrons dans un fichier et retournons le nom de ce fichier.
  
 ====== 10 ====== ====== 10 ======
Ligne 217: Ligne 217:
  
 The ScrollList (below) on the right side holds the colors that will be used to get the proper floss colors. We simply create labels to hold the colors (visual) and text.** The ScrollList (below) on the right side holds the colors that will be used to get the proper floss colors. We simply create labels to hold the colors (visual) and text.**
 +
 +La routine ReduireCouleurs (ci-dessous) utilise essentiellement la palette Image.ADAPTIVE afin d'obtenir un nombre très restreint de couleurs.
 +
 +Il y a deux routines DessinerLignes (en haut à droite). Elles créent la grille dont nous avons parlé plus tôt.
 +
 +Rgb2Hex() retourne une valeur hexadécimale de la valeur RVB qui est passée. Nous allons l'utiliser pour essayer de comparer les couleurs dans la base de données avec les couleurs de l'image.
 +
 +def Rgb2Hex(self,rgb):
 +  return '#%02x%02x%02x' % rgb
 +
 +La liste déroulante (ci-dessous) sur le côté droit contient les couleurs qui seront utilisées pour obtenir les couleurs appropriées de fils. Nous créons simplement des « labels » pour contenir les couleurs (visuelles) et le texte.
  
 ====== 11 ====== ====== 11 ======
Ligne 226: Ligne 237:
 As always, the code is available on PasteBin at http://pastebin.com/DmQ1GeUx. We will continue in the next month or so. I’m facing some surgery soon so I’m not sure how soon I will be able to sit for any long periods of time. Until then, enjoy.** As always, the code is available on PasteBin at http://pastebin.com/DmQ1GeUx. We will continue in the next month or so. I’m facing some surgery soon so I’m not sure how soon I will be able to sit for any long periods of time. Until then, enjoy.**
  
 +Voici la routine (page suivante) que nous utilisons pour essayer de trouver la meilleure correspondance entre la couleur dans l'image et de la couleur dans la base de données. Il existe de nombreux algorithmes différents sur le Web que vous pouvez regarder pour essayer de comprendre leur logique. Cela peut être assez compliqué.
 +
 +Bon. C'est tout pour ce mois-ci. La prochaine fois, nous allons commencer à créer le fichier de sortie PDF pour que la brodeuse ait un support avec lequel travailler.
  
-VF : http://pastebin.com/d8JUyeKA+Comme toujours, le code est disponible sur Pastebin : http://pastebin.com/d8JUyeKA (http://pastebin.com/DmQ1GeUx pour la version anglaise). Nous continuerons dans les prochains mois. Je dois bientôt me faire opérer et je ne sais pas à partir de quand je pourrai rester assis longtemps. Jusque-là, amusez-vous bien.
  
 ====== cadres orangés ====== ====== cadres orangés ======
issue87/python.1420491720.txt.gz · Dernière modification : 2015/01/05 22:02 de fredphil91