Logiciel gratuit pour rogner une image à ras bord du motif
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.
- Rogner une image en ligne
- Partager photos en ligne - Guide
- Mètre en ligne - Guide
- Formulaire en ligne de meta - Guide
- Detourer une image en ligne - Guide
- Légender une image - Guide
3 réponses
Salut,
Quelle coincidence je viens juste de rogner sur mon Pc une photo avec simplement la galerie de photo, en haut la fonction ROGNER
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...
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 )