Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/11/2016, à 20:01

DonutMan75

[RESOLU] [ImageMagick] Crop relatif dans convert ?

Bonjour à tous,
je développe un petit script sh qui, pour chaque png d'un répertoire, effectue les actions suivantes :
- Retrait des 55 premières lignes tout en haut de l'image (c'est la barre des menus d'une fenêtre....)
- Retrait des bandes blanches

Ca marche bien mais....

1) Le script fait l'hypothèse que toutes les images ont la même résolution (1920x1051)... Ne peut-on pas faire de crop relatif ? Par exemple, enlever les 55 premières lignes de n'importe quelle image ?

2) J'aimerais rajouter une marge *fixe* sur chaque image, savez-vous comment-faire ?

3) Le script ne fonctionne bien que parce que -trim est appelé après -crop. En pratique c'est bien ce qu'il se passe mais rien dans mon script ne me l'assure... Qu'en pensez-vous ?

Merci d'avance et bonne soirée smile

D.

#! /bin/sh

######################################
# mycrop.sh
# Retravailler automatiquement les images
# Date		: 2016-11-29
######################################


X=1920
Y=1051

M=0 # Horizontal margin (in pixels)
D=55 # Header vertical size (in pixels)

L=$(($X - $M - $M))
H=$(($Y - $D))

for f in *png ; do
	fout="${f%%.*}_OUT.png"
	convert -crop ${L}x${H}+${M}+${D} -trim -fuzz 20% $f $fout
done

Dernière modification par DonutMan75 (Le 30/11/2016, à 17:59)

Hors ligne

#2 Le 29/11/2016, à 20:26

Compte anonymisé

Re : [RESOLU] [ImageMagick] Crop relatif dans convert ?

1) Le script fait l'hypothèse que toutes les images ont la même résolution (1920x1051)... Ne peut-on pas faire de crop relatif ? Par exemple, enlever les 55 premières lignes de n'importe quelle image ?

dans ton script tu peux remplacer X= et Y= par une commande qui te renvoie la hauteur et la longueur de l'image et le mettre dans la boucle for

X=$(identify -format "%[fx:w]" $f)
Y=$(identify -format "%[fx:h]" $f)

sinon le script me parait pas mal, a priori je rajouterai +repage après le crop.

Moi j'aurai fait quelque chose comme ça :

#!/bin/sh

######################################
# mycrop.sh
# Retravailler automatiquement les images
# Date		: 2016-11-29
######################################

M=0 # Horizontal margin (in pixels)
D=55 # Header vertical size (in pixels)

for f in $@
do
   X=$(identify -format "%[fx:w]" "$f")
   Y=$(identify -format "%[fx:h]" "$f")

   fout="${f%%.*}_OUT.png"
   convert -crop ${X}x${Y}+${M}+${D} +repage -trim -fuzz 20% "$f" "$fout"
done

Pour la bordure, tu peux t'inspirer de ça : http://www.imagemagick.org/Usage/crop/#border

EDIT : simplification

Dernière modification par Compte anonymisé (Le 29/11/2016, à 21:20)

#3 Le 29/11/2016, à 21:01

moko138

Re : [RESOLU] [ImageMagick] Crop relatif dans convert ?

DonutMan75 a écrit :

je développe un petit script sh qui, pour chaque png d'un répertoire, effectue les actions suivantes :
- Retrait des 55 premières lignes tout en haut de l'image (c'est la barre des menus d'une fenêtre....)
(...)
Ca marche bien mais....
1) Le script fait l'hypothèse que toutes les images ont la même résolution (1920x1051)... Ne peut-on pas faire de crop relatif ? Par exemple, enlever les 55 premières lignes de n'importe quelle image ?

Tu n'as pas besoin de connaître les dimensions des images pour leur retirer la bande supérieure de 55 px. Car la Doc dit :

découper une image selon le principe de l'emporte-pièce. Les paramètres hauteur et largeur permettent de fixer la hauteur et la largeur de l'image finale (dans la limite des dimensions de l'image originale),

Et en effet, en supposant qu'aucune de tes images ne fait plus de 10.000 pixels de côté :

convert -crop 10000x10000+0+55 ttt.png ttt-bis.png

fait ce que tu demandes.

Ensuite, pour l'inclure dans un script, je passe la main.


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#4 Le 30/11/2016, à 14:42

DonutMan75

Re : [RESOLU] [ImageMagick] Crop relatif dans convert ?

Bonjour à tous,
merci pour ces retours !

Voici ci-dessous mon script mis-à-jour, qui fonctionne nickel !

Sinon je n'ai pas très bien compris à quoi sert le +repage... La doc dit :
"Use +repage to completely remove/reset the virtual canvas meta-data from the images."

Si on ne le fait pas, il reste des infos concernant les zones croppées c'est ça ?

Encore merci et à bientôt !

Donut.

#! /bin/sh

######################################
# mycrop.sh
# Retravailler automatiquement les images
######################################


M=50  # Horizontal margin (in pixels)
D=55 # Header vertical size (in pixels)

L=$(($X - $M - $M))
H=$(($Y - $D))

for fin in *png ; do

	X=$(identify -format "%[fx:w]" "$fin")
	Y=$(identify -format "%[fx:h]" "$fin")
	L=$X
	H=$(($Y - $D))	
	
	fout="OUT_$fin" 		# toto > OUT_toto.png
	convert -crop ${L}x${H}+0+${D} -trim -fuzz 20% -bordercolor white -border ${M}x${M} $fin $fout
done

Hors ligne

#5 Le 30/11/2016, à 16:22

Compte anonymisé

Re : [RESOLU] [ImageMagick] Crop relatif dans convert ?

je te laisse voir la différence :

$ identify test.png 
test.png PNG 1600x1200 1600x1200+0+0 8-bit sRGB 228KB 0.000u 0:00.000
$ convert -crop 1600x1200+800+600 test.png testsansrepage.png
$ convert -crop 1600x1200+800+600 test.png +repage testavecrepage.pn
$ identify testsansrepage.png 
testsansrepage.png PNG 800x600 1600x1200+800+600 8-bit sRGB 14KB 0.000u 0:00.000
$ identify testavecrepage.png 
testavecrepage.png PNG 800x600 800x600+0+0 8-bit sRGB 14KB 0.000u 0:00.000

sans +repage la taille d'origine est conservé en information, ainsi que le coordonnées du crop. (c'est peut-être ce que tu veux)

Visuellement c'est la même chose.

#6 Le 30/11/2016, à 17:59

DonutMan75

Re : [RESOLU] [ImageMagick] Crop relatif dans convert ?

Ok,
merci pour ces précisions smile

Bonne soirée à tous !

D.

Hors ligne

#7 Le 30/11/2016, à 18:27

Compte anonymisé

Re : [RESOLU] [ImageMagick] Crop relatif dans convert ?

je te conseille de mettre des " autours de tes variables qui peuvent contenir des noms de fichiers. Sinon tu aura des soucis si les fichiers ou les dossiers contiennent des espaces (ou certains autres caractères).

#8 Le 01/12/2016, à 17:35

DonutMan75

Re : [RESOLU] [ImageMagick] Crop relatif dans convert ?

Oui merci pour cette précision, en effet c'est une sage précaution.
J'ai mis à jour mon script.

Merci encore pour vos retours rapides et éclairés smile

D.

Hors ligne