Page 1 sur 1
Commande pour redimensionner plusieurs images contenues dans un dossier
Posté : lun. 10 déc. 2018 16:45
par Linuxing
Bonjour
Après avoir ouvert un dossier d'images dans un Terminal, quelle commande peut-on utiliser pour redimensionner celles-ci toutes en même temps
Merci

Re: Commande pour redimensionner plusieurs images contenues dans un dossier
Posté : lun. 10 déc. 2018 16:53
par mézig
Bonjour,
Tu ne veux pas le faire d'un clic droit sur un dossier ?...
soit ça, dans le dossier qui va bien
Code : Tout sélectionner
#!/bin/bash
#
# Author : Mathieu Vilaplana <mathieu@creationgif.com>
# Author : Matthieu MARC <matthieu.marc@wanadoo.fr>
#
# Copyright (C) 2005,2006 Charles Bouveyron <charles.bouveyron@free.fr>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# pour l'internationalisation des messages
# to generate the i18n file from .po file :
# $ msgfmt -o .locale/fr/LC_MESSAGES/nis.mo .locale/fr/LC_MESSAGES/fr.po
export TEXTDOMAIN="nis"
export TEXTDOMAINDIR=`dirname $0`"/.locale/"
MAXCPT=50000;
nb_images=0;
selection="";
txt_error="`gettext 'error'`"
#test if a file has been selected
if [ $# -eq 0 ]; then
# zenity --error --title=$txt_error --text="`gettext 'You must select at least 1 file to process'`"
here=`pwd`"/."
files=`zenity --file-selection --multiple --separator="|" --filename="$here"`"|"
#if $? != 0, user click on cancel button, so exit
if [ "$?" != 0 ] ; then
exit
fi
cpt=0
# I put all filename in $selection here because I didn't managed to put filenames with whitespace in $*
while [ ${#files} -gt 0 ]; do
f="`echo $files |cut -f1 -d'|'`"
isimage=`file -bi "$f" |grep -c image`
if [ $isimage -eq 1 ]; then
selection[$nb_images]=$f
let "nb_images++"
fi
files=`echo $files |cut -f2- -d"|"`
let "cpt++"
# only to avoid infinite loop (do not occured normaly, but nobody never know.. perhaps!)
if [ $cpt -gt $MAXCPT ]; then
shift
fi
done
fi
#===================================
# SELECT SIZE DIALOG
txt_text="`gettext 'Choisir taille image'`"
txt_title=$txt_text
txt_size="`gettext 'Taille'`"
imgsize=`zenity --title "$txt_title" --text "$txt_text" --list --radiolist --separator=" " --column="" --column="$txt_size" FALSE "60x60" FALSE "90x80" FALSE "160x120" FALSE "220x140" FALSE "320x240" FALSE "640x480" FALSE "800x600" FALSE "1024x768" FALSE "1728x1296" TRUE "2592x1944" --height=220`
#if $? != 0, user click on cancel button, so exit
if [ "$?" != 0 ] ; then
exit
fi
#user must select a target size
imgsize=`echo $imgsize | sed 's/ max//g'`
if [ ! "$imgsize" ]; then
zenity --error --title=$txt_error --text="`gettext 'select a target size'`"
# just restart myself (more user friendly I think)
($0 "$*")&
exit
fi
#transform 640x480 en 640x640 for convert to respect proportions
himgsize=$imgsize
val1=`echo "$imgsize" | awk -F'x' '{ print $1 }'`
imgsize="${val1}x${val1}"
# END SELECT SIZE DIALOG
#=========================
#Select only images
while [ $# -gt 0 ]; do
isimage=`file -bi "$1" | grep -c image`
if [ $isimage -eq 1 ]; then
selection[$nb_images]=$1
let "nb_images++"
else
isdir=`file -b "$1" |grep -c directory`
if [ $isdir -eq 1 ]; then
for f in `ls -1 "$1"`; do
isimage=`file -bi "$1/$f" |grep -c image`
if [ $isimage -eq 1 ]; then
selection[$nb_images]="$1/$f"
let "nb_images++"
fi
done
fi
fi
shift
done
n=$nb_images
let "n=n-1"
(for i in `seq 0 $n`;do
picture=${selection[$i]}
img_filename=`basename "$picture"`
img_dirname=`dirname "$picture"`
#create directory if not exist and at least one image to process
if [ ! -d "$img_dirname/$himgsize" ]; then
mkdir -p "$img_dirname/$himgsize"
fi
let "compteur += 1"
echo "`gettext '# Processing image'` $compteur / $nb_images $img_filename ..."
convert -quality 80 -resize $imgsize "$picture" "$img_dirname/$himgsize/$img_filename"
#convert -quality 80 -resize $imgsize "$picture" $himgsize/"$picture"
let "progress = compteur*100/nb_images"
echo $progress
done
) | zenity --progress --auto-close --title="`gettext 'Scaling images'`" --text="`gettext 'Processing images ...'`" --percentage=0
(gnome-open "`dirname \"${selection[0]}\"`/$himgsize") &
exit
soit ça qui permmet aussi de modifier le poids des Images
Code : Tout sélectionner
#!/bin/sh
# Auteur : Julien Leloup
# Site : http://leloup.org
# Version : 1.1
# Date : 26/01/2011
# Historique :
# - 1.1 - 26/01/2011 - Gestion des espaces dans le nom des fichiers
# - 1.0 - 24/10/2010 - Version initiale
# Dépendances :
# - zenity
# - imagemagick
# Installation :
# - Pré-requis : zenity et imagemagick doivent être installés
# - Rendre ce script exécutable
# - Déposer ce script dans le dossier $HOME/.gnome2/nautilus-scripts
# Utilisation : Accès par bouton droit / Scripts / image-redim après sélection d'une ou plusieurs images
# Fonctions :
# - Redimensionnement d'images par lot
# - Paramétrage d'une largeur et d'une hauteur maxi à ne pas dépasser, tout en conservant le ratio.
# - Paramétrage de la qualité de compression
# - Choix de la sortie (écrasement, préfixe)
# - Se base sur le type mime pour ne traiter que les images
# - N'agrandit pas les images dont les dimensions sont inférieures aux dimensions choisies
# Teste si l'utilisateur a cliqué sur annuler
f_annuler() {
if [ "$?" != 0 ] ; then
# On quitte le programme
exit
fi
}
# Message de valeur obligatoire
f_valeur() {
zenity --error --title="image-redim" --text="Vous devez choisir une valeur"
}
# Teste si au moins un fichier a été choisi
if [ $# -eq 0 ]; then
zenity --error --title="image-redim" --text="Vous devez sélectionner au moins une image pour utiliser ce programme."
exit 1
fi
# On force la saisie
while [ ! "$v_dimensions_max" ]; do
# Choix des dimensions maxi (attention, en cas d'ajout d'une nouvelle dimension, veillez à suivre la même structure <largeur>x<hauteur>)
v_dimensions_max=`zenity --list --title="image-redim" --text="Sélectionnez les dimensions maximales (en pixels)" --column="" "Personnalisé..." "640x480" "800x600" "1024x768" "1280x1024" "1680x1050" --hide-header`
# Si clic sur annuler
f_annuler
# Si clic sur valider sans avoir choisi de valeur
if [ ! "$v_dimensions_max" ]; then
f_valeur
fi
done
# Si choix personnalisé, saisie de la largeur
if [ "$v_dimensions_max" = "Personnalisé..." ] ; then
# On force la saisie
while [ ! "$v_largeur_max" ]; do
# Saisie de la largeur personnalisée
v_largeur_max=`zenity --entry --title="image-redim" --text="Saisissez une largeur personnalisée"`
# Si clic sur annuler
f_annuler
# Si clic sur valider sans avoir choisi de valeur
if [ ! "$v_largeur_max" ]; then
f_valeur
fi
# Si la valeur choisie n'est pas un entier positif
if [ ! $(echo "$v_largeur_max" | grep -E "^[0-9]+$") ] ; then
zenity --info --text="La largeur maxi doit être un entier positif"
# Réinitialisation de la valeur saisie
v_largeur_max=""
fi
done
# On force la saisie
while [ ! "$v_hauteur_max" ]; do
# Saisie de la hauteur personnalisée
v_hauteur_max=`zenity --entry --title="image-redim" --text="Saisissez une hauteur personnalisée"`
# Si clic sur annuler
f_annuler
# Si clic sur valider sans avoir choisi de valeur
if [ ! "$v_hauteur_max" ]; then
f_valeur
fi
# Si la valeur choisie n'est pas un entier positif
if [ ! $(echo "$v_hauteur_max" | grep -E "^[0-9]+$") ] ; then
zenity --info --text="La hauteur maxi doit être un entier positif"
# Réinitialisation de la valeur saisie
v_hauteur_max=""
fi
done
# Ecriture du choix personnalisé dans les dimensions maxi
v_dimensions_max=$v_largeur_max"x"$v_hauteur_max
fi
# Choix de la qualité d'image
v_qualite=`zenity --scale --title="image-redim" --text="Saisissez la qualité de l'image produite\n\n 100 : qualité excellente mais image lourde\n 0 : qualité très mauvaise mais image très légère\n 85 : bon compromis entre qualité et poids" --value=85 --min-value=0 --max-value=100`
# Si clic sur annuler
f_annuler
# On force la saisie
while [ ! "$v_sortie" ]; do
# Choix de la sortie
v_sortie=`zenity --list --title="image-redim" --text="Sélectionnez la sortie" --column="" "Ecrasement des images existantes" "Création d'images avec un préfixe" --hide-header`
# Si clic sur annuler
f_annuler
# Si clic sur valider sans avoir choisi de valeur
if [ ! "$v_sortie" ]; then
f_valeur
fi
done
# Comptage du nombre total de fichiers sélectionnées, images ou non
v_total=`file $* | wc -l`
# Compteur pour barre de progression
v_compteur=0
v_pourcentage=0
# Boucle sur les fichiers sélectionnés
(while [ $# -gt 0 ]; do
# Récupération du nom du fichier courant
v_fichier_courant="$1"
# Vérification de son type mime
v_mime_courant=`file -bi "$v_fichier_courant"`
v_fichier_est_image=`echo "$v_mime_courant" | grep image | wc -l`
# Si c'est bien une image
if [ ! $v_fichier_est_image -eq 0 ]; then
# Récupération de la largeur de l'image courante
v_largeur_avant=`identify -format '%w' "$v_fichier_courant"`
# Récupération de la hauteur de l'image courante
v_hauteur_avant=`identify -format '%h' "$v_fichier_courant"`
# Récupération de la largeur choisie
v_largeur_choisie=$(echo $v_dimensions_max | cut -d"x" -f1);
# Récupération de la hauteur choisie
v_hauteur_choisie=$(echo $v_dimensions_max | cut -d"x" -f2);
# Si au moins une dimension de l'image courante est supérieure ou égale à la dimension correspondante choisie par l'utilisateur
# (supérieur strict : -gt)
# (supérieure ou égal : -ge)
if [ $v_largeur_avant -ge $v_largeur_choisie ] || [ $v_hauteur_avant -ge $v_hauteur_choisie ] ; then
# Si écrasement des images existantes
if [ "$v_sortie" = "Ecrasement des images existantes" ] ; then
convert "$v_fichier_courant" -resize $v_dimensions_max -quality $v_qualite "$v_fichier_courant"
fi
# Si nouvelle image avec un préfixe
if [ "$v_sortie" = "Création d'images avec un préfixe" ] ; then
nouveauprefixe="image_redim_"
nouveaubasename=`basename "$v_fichier_courant"`
nouveaunom=$nouveauprefixe$nouveaubasename
convert "$v_fichier_courant" -resize $v_dimensions_max -quality $v_qualite "$nouveaunom"
fi
fi
fi
# Incrémentation du compteur de barre de progression
v_compteur=$(( v_compteur+=1 ))
# Calcul du pourcentage pour barre de progression
v_pourcentage=$(( v_compteur*100/v_total ))
# Transmission des informations à la barre de progression
echo "# $v_fichier_courant"
echo "$v_pourcentage"
shift
done
) | zenity --progress --text="image-redim" --percentage=0 --auto-kill --auto-close
# Fin du programme avec succès ;-)
zenity --info --text="Programme terminé avec succès."
Re: Commande pour redimensionner plusieurs images contenues dans un dossier
Posté : lun. 10 déc. 2018 17:05
par tyrry
Slt ,
il y a la commande
mogrify et/ou la commande
convert :
cd le /chemin/vers/mes/images
et la "convertion" :
dans cet exemple : 800 c'est la largeur en pixel , tu peux utiliser une valeur en % (ex:50%) , la hauteur sera un ratio calculer automatiquement

@+
Re: Commande pour redimensionner plusieurs images contenues dans un dossier
Posté : mar. 11 déc. 2018 19:06
par Linuxing
Merci à
mézig et
tyrry
Je retiens la solution de
tyrry qui marche sans problème
Et je mets ce sujet en tant que
résolu 
Re: [RESOLU] Commande pour redimensionner plusieurs images contenues dans un dossier
Posté : mar. 11 déc. 2018 19:38
par david37
Salut Linuxing,
La procédure pour passer un sujet en résolu a changé. Il faut simplement modifier l'attribut du sujet

(et ajouter le petit bouclier vert si tout roule).
voir tuto ici
Pour cette fois, je le fais pour toi
A+
David
Re: Commande pour redimensionner plusieurs images contenues dans un dossier
Posté : mer. 12 déc. 2018 16:10
par Linuxing
Merci David, je viens de le faire dans l'autre sujet ; s'il y a encore un détail à combler, je compte sur la vigilance de mes lecteurs pour me le faire savoir
