Motifs de remplissage

Vous connaissez probablement les motifs de remplissage du pack Office :

L’idée est de recréer exactement ces motifs en Python pour obtenir par exemple :

Grille treillis en pointillés

Partie 1 – De PowerPoint à Gimp

Dessinez un rectangle dans PowerPoint, supprimez la bordure et utilisez un remplissage de type motif de votre choix avec du noir en couleur de premier plan et du blanc en arrière-plan :

Un rectangle Noir/Blanc sans bord avec ici le motif “briques diagonales”

Collez ce rectangle dans Gimp et choisir l’outil de sélection rectangulaire avec comme dimensions fixes 8×8 pixels

Sélection 8×8 pixels du coin supérieur gauche

Image – Rogner suivant la sélection. Vous devez obtenir une image de 8×8 pixels.

Filtres – Python-Fu – Console puis coller ce script :

def nw():
 im = gimp.image_list()[0]
 layer = im.layers[0]
 s = []
 for i in range(64):
   v = list(pdb.gimp_image_pick_color(im, layer, i%8, i//8, 1, 0, 0))[0]
   if v != 255: s.append(i)
 return s

Tapez plusieurs fois sur Entrée pour revenir au prompt puis lancez le programme par nw(). Voici un exemple de résultat :

>>> nw()
[0, 1, 10, 15, 19, 22, 28, 29, 36, 43, 50, 57]

Le programme précédent parcourt les 64 pixels, pour chacun il récupère la première composante de la couleur, si elle n’est pas égale à 255 (blanc) c’est que l’on a du noir (on pouvait aussi faire le test v == 0).

Si vous voulez recommencer avec un autre motif, fermez l’image dans Gimp, changez de motif dans PowerPoint, copiez-collez le nouveau rectangle dans Gimp puis sélection 8×8, rognage et lancez le script nw().

Partie 2 – Script Python pour la NUMWORKS

from kandinsky import *

briquesdiag = 0, 1, 10, 15, 19, 22, 28, 29, 36, 43, 50, 57

def fond(motif):
 for c in range(0, 320, 8):
  for l in range(0, 222, 8):
   for i in motif:
    set_pixel(c + (i % 8), l + (i // 8), (0, 0, 0))

fond(briquesdiag)

Voici d’autres codes de motifs extraits de PowerPoint :

pointilles5 = 0,36
pointilles10 = 7,11,22,25,36,40,53,58
pointilles20 = 0,4,18,22,32,36,50,54
diag1 = 3,7,10,14,17,21,24,28,35,39,42,46,49,53,56,60
confettis = 0,4,5,7,12,13,16,17,24,25,27,28,35,36,38,39,46,47,50,51,56,58,59,63
tresse = 0,4,9,15,18,22,27,29,31,32,36,41,45,47,50,54,57,59,61
grtreillis = 0,18,22,36,50,54

Lien vers le script final