Logiciel gratuit pour rogner une image à ras bord du motif

ChercheJ Messages postés 198 Date d'inscription   Statut Membre Dernière intervention   -  
 alarache -

Bonjour,
je recherche un logiciel qui, lorsque l'on y charge une image ayant une bordure blanche, rogne celle-ci à ras bord du motif.

J'ai trouvé celui-ci :
"https://www.deleze.name/marcel/photo/transfim/rogne/recadre.html".
Il n'est pas mal mais il ne fonctionne pas toujours car j'ai chargé plusieurs images qui n'ont pas été rognées jusqu'au ras bord du motif, c'est dommage.

En connaîtriez-vous d'autres du même genre ?

Je vous remercie par avance pour votre aide.
J.

A voir également:

3 réponses

monpoit-henry Messages postés 3279 Date d'inscription   Statut Membre Dernière intervention   645
 

Salut,

Quelle coincidence je viens juste de rogner sur mon Pc une photo avec simplement la galerie de photo, en haut la fonction ROGNER


1
ChercheJ Messages postés 198 Date d'inscription   Statut Membre Dernière intervention   5
 

Personne n'a d'idée ?

P.S. : pourquoi le sujet a été déplacé dans la catégorie "Graphisme" ?
C'est un logiciel que je recherche...

0
alarache
 

Salut,

Si tu as python 3 installé sur ton système, sinon installe-le installe aussi pillow :P

Puis lance ce petit script maison, il s'appuie sur la couleur la plus commune des pixels du pourtour de l'image pour déterminer la couleur du fond de l'image.

try:
    from PIL import Image
except ImportError:
    print('Ce script nécessite pillow !', '\n')
    exit(
        'Installez-le avec la commande :'
        ' « python -m pip install pillow »'
    )

class ImageReframe:
    def __init__(self, image):
        self._image = image
        frame_color = self._get_most_common_color()
        self._coords = dict(
            top=self._get_top(frame_color),
            bottom=self._get_bottom(frame_color),
            left=self._get_left(frame_color),
            right=self._get_right(frame_color),
        )
        # left, top, right, bottom
        self._new_image = self._image.crop(
            (
                self._coords['left'], self._coords['top'],
                self._coords['right'], self._coords['bottom']
            )
        )

    def __call__(self):
        return self._new_image

    def _get_most_common_color(self):
        colors = {}
        for y in (0, self._image.height - 1):
            for x in range(self._image.width):
                color = self._image.getpixel((x, y))
                try:
                    colors[color] += 1
                except KeyError:
                    colors[color] = 1
        for x in (0, self._image.width - 1):
            for y in range(self._image.height):
                color = self._image.getpixel((x, y))
                try:
                    colors[color] += 1
                except KeyError:
                    colors[color] = 1
        return max(colors, key=lambda v: v[1])


    def _get_top(self, color):
        for y in range(self._image.height):
            for x in range(self._image.width):
                if self._image.getpixel((x, y)) != color:
                    return max(0, y - 1)

    def _get_bottom(self, color):
        for y in range(self._image.height - 1, -1, -1):
            for x in range(self._image.width):
                if self._image.getpixel((x, y)) != color:
                    return min(self._image.height - 1, y + 1)

    def _get_left(self, color):
        for x in range(self._image.width):
            for y in range(self._image.height):
                if self._image.getpixel((x, y)) != color:
                    return max(0, x - 1)

    def _get_right(self, color):
        for x in range(self._image.width - 1, -1, -1):
            for y in range(self._image.height):
                if self._image.getpixel((x, y)) != color:
                    return min(self._image.width - 1, x + 1)

if __name__ == '__main__':
    import os
    import argparse
    import mimetypes
    images_mimes = (
        'image/bmp',
        'image/gif',
        'image/jpeg',
        'image/png',
        'image/webp',
    )
    HELP = f'''
PROGRAMME DE ROGNAGES D'IMAGES

formats d'images supportés : {
    ', '.join(mime.split('/')[1] for mime in images_mimes)
}

==============================

--help -h   : affiche cette aide.

==============================

Rognage d'une image simple :

--image -i  : chemin vers l'image
--new -n    : chemin où enregistrer l'image recadrée
              si non stipulée, la nouvelle image sera affichée

==============================

Rognages des images d'un répertoire :

--fromdir -fd   : chemin vers le répertoire des images à rogner
--savedir -sd   : chemin vers le répertoire des images rognées à
                  enregistrer
'''
    parser = argparse.ArgumentParser()
    parser.add_argument('--image', '-i', type=str, action='store')
    parser.add_argument('--new', '-n', type=str, action='store')
    parser.add_argument('--fromdir', '-fd', type=str, action='store')
    parser.add_argument('--savedir', '-sd', type=str, action='store')
    try:
        args = parser.parse_args()
    except ValueError as e:
        exit(e)

    if args.image:
        if args.dir or args.save_dir:
            print(
                "[ATTENTION] seul --new peut être stipulé si --image"
                "l'est."
            )
        if not os.path.exists(args.image):
            exit(f"[ERREUR] L'image {args.image} n'existe pas.")
        if args.new:
            if os.path.exists(args.new):
                exit(
                    f"[ERREUR] Le fichier {args.new} existe déjà, ne"
                    " peut l'écraser."
                )
            else:
                image = Image.open(args.image)
                new = ImageReframe(image)()
                new.save(args.new)
        else:
            image = Image.open(args.image)
            new = ImageReframe(image)()
            new.show()
    elif args.fromdir and args.savedir:
        if not os.path.isdir(args.fromdir):
            exit(
                f"[ERREUR] Le répertoire {args.fromdir} n'existe pas"
                " ou n'est pas un répertoire."
            )
        if not os.path.isdir(args.savedir):
            exit(
                f"[ERREUR] Le répertoire {args.savedir} n'existe pas"
                " ou n'est pas un répertoire."
            )
        for fyle in os.listdir(args.fromdir):
            if mimetypes.guess_type(fyle)[0] in images_mimes:
                image = Image.open(f'{args.fromdir}/{fyle}')
                new = ImageReframe(image)()
                filename = os.path.basename(fyle)
                new.save(f'{args.savedir}/{filename}')
                print(filename, 'recadré et enregistré.')
    else:
        print(HELP.strip())

Enregistre ce code dans un fichier rogner.py

Puis pour l'exécuter :

python rogner_image.py -i chenim_vers_image

Affichera directement l'image modifiée sans l'enregistrer.

Par exemple :

python rogner_image.py -i /home/bibi/images/dog.png

---

python rogner_image.py -i chenim_vers_image -n chemin_destination_image_rognée

Enregistrera l'image rognée vers la destination.

par exemple :

python rogner_image.py -i /home/bibi/images/dog.png -n /home/bibi/dog_2.png

---

python rogner_image.py -fd chemin_répertoire_source -sd chemin_répertoire_destination

Rognera chaque images de la source et l'enregistrera dans la destination

Par exemple :

python rogner_image.py -fd /home/bibi/images/animaux -sd /home/bibi/images/animaux_nouveaux

ATTENTION, dans ce cas, aucune vérification n'est faite sur l'écrasement de fichiers existants dans le répertoire de destination (la flemme :D )

0