Problème de centrage pour 4 photos (Python)

Fermé
Lucascivi - Modifié le 26 janv. 2022 à 16:50
mamiemando Messages postés 33361 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 novembre 2024 - 26 janv. 2022 à 17:50
Bonjour,

j'ai codé un photomaton pour effectué 4 photos différentes et les disposer sur une page comme ceci

12
34


avec cette ligne:

elif nb == 4:
    os.system("montage *.jpg -tile x2 -geometry +70+90 -resize 45% montage.jpg")


Le problème, c'est que (-geometry +y+x ) déplace les images entre elles depuis l'axe de la page, et moi, j'aimerais les déplacer depuis le bas de la page pour que les 4 image soient en haut de la page et que je puisse mettre un texte en bas.

Est-ce que quelqu'un à une idée ?

Merci
A voir également:

1 réponse

mamiemando Messages postés 33361 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 novembre 2024 7 799
26 janv. 2022 à 17:14
Bonjour,

Sans spécifier ce qu'est le programme "montage" auquel ton script python fait appel, on ne peut pas trop répondre. Une manière de procéder seraient d'organiser tes images dans une page web, que tu pourrais alors ouvrir et imprimer depuis ton navigateur. Cela aurait en plus l'avantage de ne pas dépendre du programme
montage
.

Tu peux par exemple t'inspirer de cet exemple. Afin d'avoir des images qui rentrent dans la page, on force leur largeur comme expliqué dans cette discussion :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys

TEMPATE_HTML = """
<!DOCTYPE html>
<html>
<head>
<style>
.grid-container {
    display: grid;
    grid-template-columns: %(grid_template_columns)s;
    width: 50%%;
    padding: 10px;
}

img.scaled {
  width: 100%%;
  height: auto;
}

.grid-item {
    padding: 20px;
    text-align: center;
}
</style>
</head>
<body>

<div class="grid-container">
%(div_images)s
</div>
%(text)s
</body>
</html>
"""

def make_montage(image_filenames, text = "", num_columns = 2):
    grid_template_columns = " ".join(["auto"] * num_columns)
    div_images = "\n".join(
        f"<div class=\"grid-item\"><img class=\"scaled\" src=\"{image_filename}\"/></div>"
        for image_filename in image_filenames
    )
    return TEMPATE_HTML % {
        "grid_template_columns" : grid_template_columns,
        "div_images" : div_images,
        "text" : text
    }

filename = "montage.html"
with open(filename, "w") as f:
    image_filenames = [
        "/home/mando/Downloads/image1.gif",
        "/home/mando/Downloads/image2.gif",
        "/home/mando/Downloads/image3.gif",
        "/home/mando/Downloads/image1.gif",
    ]
    print(
        make_montage(image_filenames, "bonjour", num_columns = 2),
        file = f
    )


Ce programme crée lorsqu'il est exécuté le fichier
montage.html
, qui dispose 4 images et écrit en dessous "bonjour".

Bonne chance
0
Salut, c'est monté avec Imagemagick. Merci de ta réponse
0
mamiemando Messages postés 33361 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 novembre 2024 7 799 > Lucascivi
26 janv. 2022 à 17:50
Bonjour,

Vu ce que tu veux faire, je pense que faire un fichier HTML comme je te le préconise dans mon message sera plus pratique à terme :
  • Cela te permet de faire la mise en page que tu veux pour peux que tu maîtrises un peu le CSS (ou que tu cherches vite fait comment ça marche)
  • Cela t'évite de générer des fichiers image qui prennent de la place sur ton disque et qui ne servent que le temps du montage.


Si tu préfères passer par ImageMagick, alors ta question n'est pas vraiment une question python, mais plus une question sur comment utiliser ImageMagick et tu peux chercher des tutoriels qui expliquent comment faire une grille avec ce logiciel, par exemple cette page.

Bonne chance
0