Je pense que j'ai réussi à le faire fonctionner.
La procédure est que vous mettez l'image de fond (nommée "background.png", le ticket sans le numéro, mais avec 2014/
) dans un dossier, avec le script ci-dessous. Ensuite, si vous exécutez le script (après avoir modifié les trois lignes dans la section head):
-
Le script produit des numéros de 001
à 500
(mais cela peut être n'importe quel nombre que vous définissez dans la section head) Ensuite, en utilisant imagemagick
:
-
le script crée (nombre par nombre) des couches (fichiers) distinctes avec le numéro à la bonne position
-
il copie la couche de fond + les couches de numéro dans un nouveau fichier, enregistré dans le même dossier, pour chaque numéro.
-
le script supprime ensuite les couches supplémentaires (temporaires)
Remarques
-
Vous devrez peut-être installer imagemagick
:
sudo apt-get install imagemagick
-
J'ai utilisé la version gratuite de la police de caractères. Il s'est avéré que dans le script, j'ai dû définir le chemin absolu de la police de caractères pour que cela fonctionne. Je l'ai simplement copié dans ~/.fonts
et utilisé ce chemin. Dans la section head du script, définissez le vôtre.
Le script:
#!/usr/bin/env python3
import subprocess
import os
curr_path = os.path.dirname(os.path.abspath(__file__))
#---
number_of_tickets = 5
bg_file = curr_path+"/"+"background.png"
font = '/home/jacob/.fonts/dirt2 soulstalker.otf'
#---
def command(string, layer, position):
return "convert -size 2858x1000 xc:None -fill black -font "+'"'+font+'"'+\
" -stroke None -fill white -pointsize 123 -style Normal -gravity west -draw "+\
position+"'"+string+"'"+'" '+layer
def print_tofile(string, number):
print("creating file "+number+"."*3)
layer_1 = curr_path+"/"+number+"_a.png"
layer_2 = curr_path+"/"+number+"_b.png"
cmd_1 = command(string, layer_1, '"text 497,-420 ')
cmd_2 = command(string, layer_2, '"text 1035,-420 ')
subprocess.call(["/bin/bash", "-c", cmd_1])
subprocess.call(["/bin/bash", "-c", cmd_2])
cmd_3 = "convert "+bg_file+" "+layer_1+" "+layer_2+\
" -background None -layers merge "+curr_path+"/"+number+"_ticket.png"
subprocess.call(["/bin/bash", "-c", cmd_3])
os.remove(layer_1)
os.remove(layer_2)
print("done")
ns = [str(n) for n in range(number_of_tickets+1)][1:]
for item in ns:
number = str(int(3-len(item))*"0")+item
string = number
print_tofile(string, number)
Comment utiliser
Copiez-le dans un fichier vide, dans la section head du script, définissez:
- le nombre de billets
- le chemin (absolu) vers la police de caractères
- le nom de l'image de fond (billet sans numéros) si vous voulez le changer
et enregistrez-le sous le nom de numbering.py
, avec votre image de fond (2858px par 1000px), nommée background.png
dans un seul et même dossier.
Exécutez-le avec la commande:
python3 /chemin/vers/script.py