From d5923a5feaded494d0505ee6a37e4a08e976aa53 Mon Sep 17 00:00:00 2001 From: Polarolouis Date: Thu, 4 Jan 2024 19:19:12 +0100 Subject: [PATCH] Capable of writing a card --- .gitignore | 3 +- dico.txt | 835 +++++++++++++++++++++++++++++++++++++++++++++++++ generator.py | 36 +++ sample-out.jpg | Bin 0 -> 15661 bytes 4 files changed, 873 insertions(+), 1 deletion(-) create mode 100644 dico.txt create mode 100644 sample-out.jpg diff --git a/.gitignore b/.gitignore index 8183fdf..e79c642 100644 --- a/.gitignore +++ b/.gitignore @@ -161,4 +161,5 @@ cython_debug/ #.idea/ # Ignore image folder -img/ \ No newline at end of file +img/ +font/ \ No newline at end of file diff --git a/dico.txt b/dico.txt new file mode 100644 index 0000000..1446e9a --- /dev/null +++ b/dico.txt @@ -0,0 +1,835 @@ +angle +armoire +banc +bureau +cabinet +carreau +chaise +classe +clef +coin +couloir +dossier +eau +ecole +entrer +escalier +etagere +exterieur +fenetre +interieur +lavabo +lit +marche +matelas +maternelle +meuble +mousse +mur +peluche +placard +plafond +porte +poubelle +radiateur +rampe +rideau +robinet +salle +salon +serrure +serviette +siege +sieste +silence +sol +sommeil +sonnette +sortie +table +tableau +tabouret +tapis +tiroir +toilette +vitre +aller +amener +apporter +appuyer +attendre +bailler +coucher +dormir +eclairer +emmener +emporter +entrer +fermer +frapper +installer +lever +ouvrir +presser +rechauffer +rester +sonner +sortir +venir +absent +assis +bas +haut +present +gauche +droite +debout +dedans +dehors +face +loin +pres +tard +tot +apres +avant +contre +dans +de +derriere +devant +du +sous +sur +crayon +stylo +feutre +mine +gomme +dessin +coloriage +rayure +peinture +pinceau +couleur +craie +papier +feuille +cahier +carnet +carton +ciseaux +decoupage +pliage +pli +colle +affaire +boite +casier +caisse +trousse +cartable +jeu +jouet +pion +domino +puzzle +cube +perle +chose +forme +carre +rond +pate +modeler +tampon +livre +histoire +bibliotheque +image +album +titre +conte +dictionnaire +magazine +catalogue +page +ligne +mot +enveloppe +etiquette +carte +appel +affiche +alphabet +appareil +camescope +cassette +chaine +chanson +chiffre +contraire +difference +doigt +ecran +ecriture +film +fois +foi +idee +instrument +intrus +lettre +liste +magnetoscope +main +micro +modele +musique +nom +nombre +orchestre +ordinateur +photo +point +poster +pouce +prenom +question +radio +sens +tambour +telecommande +telephone +television +trait +trompette +voix +xylophone +zero +chanter +chercher +choisir +chuchoter +coller +colorier +commencer +comparer +compter +construire +continuer +copier +couper +dechirer +decoller +decorer +decouper +demolir +dessiner +dire +discuter +ecouter +ecrire +effacer +entendre +entourer +envoyer +faire +finir +fouiller +gouter +imiter +laisser +lire +mettre +montrer +ouvrir +parler +peindre +plier +poser +prendre +preparer +ranger +reciter +recommencer +regarder +remettre +repeter +repondre +sentir +souligner +tailler +tenir +terminer +toucher +travailler +trier +ami +attention +camarade +colere +copain +coquin +dame +directeur +directrice +droit +effort +eleve +enfant +fatigue +faute +fille +garcon +gardien +madame +maitre +maitresse +mensonge +ordre +personne +retard +joueur +sourire +travail +aider +defendre +desobeir +distribuer +echanger +expliquer +gronder +obeir +obliger +partager +preter +priver +promettre +progres +progresser +punir +quitter +raconter +expliquer +refuser +separer +blond +brun +calme +curieux +different +doux +enerver +gentil +grand +handicape +inseparable +jaloux +moyen +muet +noir +nouveau +petit +poli +propre +roux +sage +sale +serieux +sourd +tranquille +arrosoir +assiette +balle +bateau +boite +bouchon +bouteille +bulles +canard +casserole +cuillere +cuvette +douche +entonnoir +gouttes +litre +moulin +pluie +poisson +pont +pot +roue +sac +plastique +saladier +seau +tablier +tasse +trous +verre +agiter +amuser +arroser +attraper +avancer +baigner +barboter +boucher +bouger +deborder +doucher +eclabousser +essuyer +envoyer +couler +partir +flotter +gonfler +inonder +jouer +laver +melanger +mouiller +nager +pleuvoir +plonger +pousser +pouvoir +presser +recevoir +remplir +renverser +secher +serrer +souffler +tirer +tourner +tremper +verser +vider +vouloir +amusant +chaud +froid +humide +interessant +mouille +sec +transparent +moitie +autant +beaucoup +encore +moins +peu +plus +trop +anorak +arc +bagage +baguette +barbe +bonnet +botte +bouton +bretelle +cagoule +casque +casquette +ceinture +chapeau +chaussette +chausson +chaussure +chemise +cigarette +col +collant +couronne +cravate +culotte +echarpe +epee +fee +fleche +fusil +gant +habit +jean +jupe +lacet +laine +linge +lunettes +magicien +magie +maillot +manche +manteau +mouchoir +moufle +noeud +paire +pantalon +pied +poche +prince +pyjama +reine +robe +roi +ruban +semelle +soldat +sociere +tache +taille +talon +tissu +tricot +uniforme +valise +veste +vetement +changer +chausser +couvrir +deguiser +deshabiller +enlever +habiller +lacer +porter +ressembler +clair +court +etroit +fonce +joli +large +long +multicolore +nu +use +bien +mal +mieux +presque +aiguille +ampoule +avion +bois +bout +bricolage +bruit +cabane +carton +clou +colle +crochet +elastique +ficelle +fil +marionnette +marteau +metal +metre +morceau +moteur +objet +outil +peinture +pinceau +planche +platre +scie +tournevis +vis +voiture +arracher +attacher +casser +coudre +detruire +ecorcher +enfiler +enfoncer +fabriquer +mesurer +percer +pincer +reparer +reussir +servir +taper +trouer +trouver +adroit +difficile +dur +facile +lisse +maladroit +pointu +tordu +accident +aeroport +camion +engin +feu +frein +fusee +garage +gare +grue +helicoptere +moto +panne +parking +pilote +pneu +quai +train +virage +vitesse +voyage +wagon +zigzag +arreter +atterrir +bouder +charger +conduire +demarrer +disparaitre +donner +ecraser +envoler +garder +garer +manquer +partir +poser +reculer +rouler +tendre +transporter +voler +abime +ancien +blanc +bleu +casse +cinq +dernier +deux +deuxieme +dix +gris +gros +huit +jaune +meme +neuf +pareil +premier +quatre +rouge +sept +seul +six +solide +trois +troisieme +un +vert +dessus +autour +vite +vers +acrobate +arret +arriere +barre +barreau +bord +bras +cerceau +chaise +cheville +chute +coeur +corde +corps +cote +cou +coude +cuisse +danger +doigts +dos +echasses +echelle +epaule +equipe +escabeau +fesse +filet +fond +genou +gymnastique +hanche +jambe +jeu +mains +milieu +montagne +mur +escalade +muscle +numero +ongle +parcours +pas +passerelle +pente +peur +pied +plongeoir +poignet +poing +pont +signe +singe +poutre +equilibre +prise +riviere +crocodile +roulade +pirouette +saut +serpent +sport +suivant +tete +toboggan +tour +trampoline +tunnel +ventre +accrocher +appuyer +arriver +baisser +balancer +bondir +bousculer +cogner +courir +danser +depasser +descendre +ecarter +escalader +gagner +gener +glisser +grimper +marcher +pattes +debout +monter +montrer +pencher +percher +perdre +ramper +rater +remplacer +respirer +retourner +revenir +sauter +soulever +suivre +tomber +transpirer +traverser +dangeureux +epais +fort +groupe +immobile +rond +serre +souple +ensemble +ici +jamais +toujours +souvent +bagarre +balancoire +ballon +bande +bicyclette +bille +cage +ecureuil +cerf +volant +chateau +coup +cour +course +echasse +flaque +eau +paix +pardon +partie +pedale +pelle +pompe +preau +raquette +rayon +recreation +sable +sifflet +signe +tas +tricycle +tuyau +velo +file +rang +bagarrer +battre +cacher +cracher +creuser +crier +degonfler +dispute +empecher +galoper +hurler +jongler +lancer +pedaler +plaindre +pleurer +poursuivre +proteger +saigner +salir +siffler +surveiller +trainer +trouver +fou +mechant \ No newline at end of file diff --git a/generator.py b/generator.py index e69de29..fe30bc5 100644 --- a/generator.py +++ b/generator.py @@ -0,0 +1,36 @@ +from PIL import Image +from PIL import ImageFont +from PIL import ImageDraw + +# Colors +BLACK = (0, 0, 0) +GREY = (155, 155, 155) + +def write_card(text): + text = text.upper() + img = Image.open("img/template_carte_mot.jpg") + draw = ImageDraw.Draw(img) + # font = ImageFont.truetype(, ) + regularFont = ImageFont.truetype("font/OpenSans-Regular.ttf", 32) + boldFont = ImageFont.truetype("font/OpenSans-Bold.ttf", 64) + + # Main text + draw.text((65, 185), text, BLACK, font=boldFont) + + # Reversed text + text_position = (20, 175) + + # Get the size of the rotated text + rotated_text_img = Image.new("RGBA", (300, 50), (0, 0, 0, 0)) + rotated_text_draw = ImageDraw.Draw(rotated_text_img) + rotated_text_draw.text((30, 0), text, GREY, font=regularFont) + rotated_text_img = rotated_text_img.rotate(180, expand=True) + rotated_text_width, rotated_text_height = rotated_text_img.size + + # Calculate the adjusted position for pasting the rotated text + adjusted_position = (text_position[0], text_position[1] - rotated_text_height) + + # Paste the rotated text onto the image + img.paste(rotated_text_img, adjusted_position, rotated_text_img) + + img.save(f"img/results/{text}.jpg") diff --git a/sample-out.jpg b/sample-out.jpg new file mode 100644 index 0000000000000000000000000000000000000000..029036da1663fccc61eacd1a3f2732d07c762823 GIT binary patch literal 15661 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 literal 0 HcmV?d00001