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

Python Discussion :

plus une question d'algo


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Points : 31
    Points
    31
    Par défaut plus une question d'algo
    Bonjour à toutes et tous

    J'ai un dossier avec des images il peut en contenir de 1 à 50, mais pourquoi pas plus.

    Je voudrais rassembler ces images dans un fichier ou plusieurs en fonction de leur nombre

    de 1 à 4 une planche de 4 images (je regroupe les fichiers sous format 2*2 en rajoutant des images blanches

    5 et 6 format 6 vues (2*3)

    7 et 8 format 8 vues (2*4)

    9 format 9 vues (3*3)

    10 => une planche de 4 et une de 6
    ...
    ...

    je fais bêtement un match case et je lance la fonction des planches.

    Mais je me dis qu'il doit y avoir plus simple

    autant avec les modulos % ou un truc du genre, mais je ne réussis pas à imaginer une solution autre que de lister les case possibles uns à uns

    Mon prog est ici certes un peu longuet vu que j'ai codé jusqu'à 20 images avec des match cases:

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    import numpy as np
    from PIL import Image
    from os import*
    from glob import glob
     
    path='c:\\0_code\\Dcm'
    import os
    #justapose les images
    def horizontal(liste,repertoire):
        imgs    = [ Image.open(i) for i in liste ]
        min_shape = sorted( [(np.sum(i.size), i.size ) for i in imgs])[0][1]
        imgs_comb = np.hstack([i.resize(min_shape) for i in imgs])
        imgs_comb = Image.fromarray( imgs_comb)
        imgs_comb.save( repertoire + '\\horizontal.jpg' )
    #supperpose les images   
    def vertical(liste,repertoire):
            imgs2    = [ Image.open(i) for i in liste ]
            # pick the image which is the smallest, and resize the others to match it (can be arbitrary image shape here)
            min_shape = sorted( [(np.sum(i.size), i.size ) for i in imgs2])[0][1]
            imgs2_comb = np.vstack([i.resize(min_shape) for i in imgs2])
            imgs2_comb = Image.fromarray( imgs2_comb)
            imgs2_comb.save( repertoire +'\\vertical.jpg' )
    #ajoute une img blanche        
    def blanche(liste,repertoire) :
            whiteframe=Image.new('RGB',(900,600), color=(255,255,255))
            whiteframe.save(repertoire +'\\zzzblanc.jpg')
            liste.append(repertoire +'\\zzzblanc.jpg')
    #ajoute deux images blanches
    def blanche_2(liste,repertoire) :
            whiteframe=Image.new('RGB',(900,600), color=(255,255,255))
            whiteframe.save(repertoire +'\\zzzblanc.jpg')
            liste.append(repertoire +'\\zzzblanc.jpg')
            whiteframe.save(repertoire +'\\zzzblanc2.jpg')
            liste.append(repertoire +'\\zzzblanc2.jpg')
    # impression 4 vues      
    def imp_4(liste,repertoire):
        horizontal(liste[2:],repertoire)
        temp=Image.open(repertoire+'\\horizontal.jpg')
        temp.save(repertoire +'\\horizontal0.jpg')
        horizontal(liste[:2],repertoire1)
        liste_temp=(repertoire +'\\horizontal.jpg',repertoire +'\\horizontal0.jpg')
        vertical(liste_temp,repertoire)
        os.remove(repertoire+'\\horizontal.jpg')
        os.remove(repertoire+'\\horizontal0.jpg')
    #impression 6 vues
    def imp_6(liste,repertoire):
            horizontal(liste[0:2],repertoire)
            temp=Image.open(repertoire+'\\horizontal.jpg')
            temp.save(repertoire +'\\horizontal0.jpg')
            horizontal(liste[2:4],repertoire)
            temp=Image.open(repertoire+'\\horizontal.jpg')
            temp.save(repertoire +'\\horizontal1.jpg')
            horizontal(liste[4:],repertoire)
            liste_temp=(repertoire +'\\horizontal0.jpg',repertoire +'\\horizontal1.jpg',repertoire +'\\horizontal.jpg')
            vertical(liste_temp,repertoire)
            os.remove(repertoire+'\\horizontal.jpg')
            os.remove(repertoire+'\\horizontal0.jpg')
            os.remove(repertoire+'\\horizontal1.jpg')    
    #impression 8 vues
    def imp_8(liste,repertoire):
            horizontal(liste[0:2],repertoire)
            temp=Image.open(repertoire+'\\horizontal.jpg')
            temp.save(repertoire +'\\horizontal0.jpg')
            horizontal(liste[2:4],repertoire)
            temp=Image.open(repertoire+'\\horizontal.jpg')
            temp.save(repertoire +'\\horizontal1.jpg')
            horizontal(liste[4:6],repertoire)
            temp=Image.open(repertoire+'\\horizontal.jpg')
            temp.save(repertoire +'\\horizontal2.jpg')
            horizontal(liste[6:8],repertoire)      
            liste_temp=(repertoire +'\\horizontal0.jpg',repertoire +'\\horizontal1.jpg',repertoire +'\\horizontal2.jpg',repertoire +'\\horizontal.jpg')
            vertical(liste_temp,repertoire)
            os.remove(repertoire+'\\horizontal.jpg')
            os.remove(repertoire+'\\horizontal0.jpg')
            os.remove(repertoire+'\\horizontal1.jpg')
            os.remove(repertoire +'\\horizontal2.jpg')
    #impression 9 vues       
    def imp_9(liste,repertoire):
            horizontal(liste[0:3],repertoire)
            temp=Image.open(repertoire+'\\horizontal.jpg')
            temp.save(repertoire +'\\horizontal0.jpg')
            horizontal(liste[3:6],repertoire)
            temp=Image.open(repertoire+'\\horizontal.jpg')
            temp.save(repertoire +'\\horizontal1.jpg')
            horizontal(liste[6:9],repertoire)      
            liste_temp=(repertoire +'\\horizontal0.jpg',repertoire +'\\horizontal1.jpg',repertoire +'\\horizontal.jpg')
            vertical(liste_temp,repertoire)
            os.remove(repertoire+'\\horizontal.jpg')
            os.remove(repertoire+'\\horizontal0.jpg')
            os.remove(repertoire+'\\horizontal1.jpg')         
     
    # affiche la liste des dossiers    
    liste_fichiers =listdir(path)
    for i in range(len(liste_fichiers)):
        print(liste_fichiers[i])
     
    #demande quel dossier est à explorer
    repertoire=input(" Donner le répertoire à explorer : ")
    repertoire1=path + '\\' + repertoire
    liste_fichiers =listdir(repertoire1)
     
    #récupère les fichiers jpg du dossier selectionné
    liste_image = glob(os.path.join(repertoire1, "*.jpg"))
     
    #choix d'impression
    match (len(liste_image)):
        case 1:
            imgs =Image.open(liste_image)
            imgs.save('planche.jpg')
     
        case 2:
            horizontal(liste_image,repertoire1)
            os.rename(repertoire1+'\\horizontal.jpg',repertoire1+'\\planche1.jpg')
        case 3 :
            blanche(liste_image,repertoire1)
            imp_4(liste_image,repertoire1)
            os.remove(repertoire1+'\\zzzblanc.jpg')
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
        case 4 :
            imp_4(liste_image,repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
        case 5:
            blanche(liste_image,repertoire1)
            imp_6(liste_image,repertoire1)
            os.remove(repertoire1+'\\zzzblanc.jpg')
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
     
        case 6:
            imp_6(liste_image,repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
     
        case 7:
            blanche(liste_image,repertoire1)
            imp_8(liste_image,repertoire1)
            os.remove(repertoire1+'\\zzzblanc.jpg')
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
     
        case 8:
            imp_8(liste_image,repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
     
        case 9:
            imp_9(liste_image,repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
     
        case 10:
            imp_6(liste_image[0:6],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
            imp_4(liste_image[6:],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche2.jpg')
     
        case 11:
            blanche(liste_image,repertoire1)
            imp_6(liste_image[0:6],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
            imp_6(liste_image[6:],repertoire1)
            os.remove(repertoire1+'\\zzzblanc.jpg')
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche2.jpg')
     
        case 12:
            imp_6(liste_image[0:6],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
            imp_6(liste_image[6:],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche2.jpg')
     
        case 13:
            blanche(liste_image,repertoire1)
            imp_6(liste_image[0:6],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
            imp_8(liste_image[6:],repertoire1)
            os.remove(repertoire1+'\\zzzblanc.jpg')
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche2.jpg')      
     
        case 14:
            imp_6(liste_image[0:6],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
            imp_8(liste_image[6:],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche2.jpg')
     
        case 15:
            blanche(liste_image,repertoire1)
            imp_8(liste_image[0:8],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
            imp_8(liste_image[8:],repertoire1)
            os.remove(repertoire1+'\\zzzblanc.jpg')
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche2.jpg')
     
        case 16:
            imp_8(liste_image[0:8],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
            imp_8(liste_image[8:],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche2.jpg')
     
        case 17:
            imp_9(liste_image[0:9],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
            imp_8(liste_image[9:],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche2.jpg')
     
        case 18:
            imp_9(liste_image[0:9],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
            imp_9(liste_image[9:],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche2.jpg')
     
        case 19:
            blanche(liste_image,repertoire1)
            imp_6(liste_image[0:6],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
            imp_6(liste_image[6:12],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche2.jpg')
            imp_8(liste_image[12:],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche3.jpg')
            os.remove(repertoire1+'\\zzzblanc.jpg')
     
        case 20:
            imp_6(liste_image[0:6],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche1.jpg')
            imp_6(liste_image[6:12],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche2.jpg')       
            imp_8(liste_image[12:],repertoire1)
            os.rename(repertoire1+'\\vertical.jpg',repertoire1+'\\planche3.jpg')
     
     
     
        case _:
            print('pas encore codé')

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 362
    Points : 36 894
    Points
    36 894
    Par défaut
    Salut,

    Citation Envoyé par figuedi Voir le message
    je fais bêtement un match case et je lance la fonction des planches.

    Mais je me dis qu'il doit y avoir plus simple
    Il faut peut être simplifier la prise de décision quand à choisir de regrouper par 2, 3, 4 et que faire du reste.
    Par exemple en divisant le nombre par 3 si le quotient dépasse une valeur donnée, on essaiera de les regrouper par 4 ou plus; s'il n'y a que des cas particuliers, trouver une régularité sera difficile et n'empêche pas d'y incruster quelques cas particuliers.

    Pour l'instant, ce n'est pas encore une question d'algo puisqu'on a est à définir les régularités qui permettraient d'en imaginer un...

    - W

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 122
    Points : 9 547
    Points
    9 547
    Par défaut
    Pour 15, tu as choisi 8+8, avec une image blanche.
    Pourquoi pas 9+6 ?
    Pour 19, pourquoi pas 4+6+9 ?
    Ici, c'est effectivement pas très équilibré, et je peux comprendre ce choix.

    Pour les nombres au delà de 20, l'idée serait :
    Si le nombre est impair, faire une planche de 9, et traiter le reliquat, en bouclant sur la liste de règles suivantes :

    Si le reliquat est multiple de 9, faire autant de planches de 9 que nécessaire.
    Tant que le nombre d'images restant à faire est supérieur ou égal à 24, faire une planche de 8.
    Si le reliquat est 22, faire 2 planches de 8 et une de 6
    Si le reliquat est 20, faire 1 planche de 8 et deux de 6
    Si le reliquat est 18, faire 2 planches de 9

    Ici, je vise 'faire un nombre minimum de planches' ; avec 72 images, je préfère 8 planches de 9 que 9 planches de 8, ou 12 planches de 6.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Points : 31
    Points
    31
    Par défaut
    Vous avez raison c'est a la fois erratique et trop complexe.

    Vu le résultat une fois groupée et intégrée en PDF les photos sont viables (ni trop petites ni trop grosse en planche de 6

    les photos en planche de 4 ne sont pas plus grosses que celles de 6 et 8 et 9 sont trop petites

    Je vais donc forcer les planches de 6, et voir si je m'en sors avec le modulo
    6-(x%6) me donnera le nombre de photos blanches a rajouter et le quotient me donnera le nombre de planches complètes à faire.

    Je vais essayer ça

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. FastReport mais c'est plus une question de langage
    Par SergioMaster dans le forum Langage
    Réponses: 3
    Dernier message: 13/03/2019, 16h55
  2. Un problème épineux sur un formulaire et une question plus générale
    Par Stephdem dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 26/11/2015, 14h35
  3. Réponses: 2
    Dernier message: 22/11/2009, 23h17
  4. [Algo] Une question d'intervalle
    Par Jibees dans le forum Langage
    Réponses: 7
    Dernier message: 19/12/2006, 14h28

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