Conversion d'images à la volée
Dernière réponse : dans Le monde de Linux
Hello les gens !
Dites, je suis à la recherche d'un soft qui me permettrait de convertir à la volée un dossier entier de plusieurs centaines de photos jpeg. Car j'ai un magnifique APN 10 Mpix mais les photos sont trop grandes pour pouvoir tout mettre sur un FTP et garder un temps de DL acceptable... Donc j'ai besoin d'un soft qui permet de passer des tofs à une résolution inférieure avec une qualité toujours acceptable. Et c'est un peu relou de faire ça a mano avec GIMP... Alors si vous connaissez un truc en ligne de commandes par exemple qui fait ça, ça m'intéresse.
Merci d'avance...
Dites, je suis à la recherche d'un soft qui me permettrait de convertir à la volée un dossier entier de plusieurs centaines de photos jpeg. Car j'ai un magnifique APN 10 Mpix mais les photos sont trop grandes pour pouvoir tout mettre sur un FTP et garder un temps de DL acceptable... Donc j'ai besoin d'un soft qui permet de passer des tofs à une résolution inférieure avec une qualité toujours acceptable. Et c'est un peu relou de faire ça a mano avec GIMP... Alors si vous connaissez un truc en ligne de commandes par exemple qui fait ça, ça m'intéresse.
Merci d'avance...
Autres pages sur : conversion images volee
Lassé par la pub ? Créez un compte
Meilleure solution
A première lecture, oui : la syntaxe est bonne.
Je ne spéculerai pas sur la commande convert puisque je ne l'ai pas sous la main pour vérifier.
Si tu veux vraiment du commentaire, en voilà. Un puriste te ferait remarquer que l'usage veut que les variables s'écrivent en majuscules, que tu n'as pas vérifié le retour de la création du répertoire et qu'en cas de d'absence de fichiers *.jpg, la commande for renvoie *.jpg, qui n'est pas un fichier.
Et toujours pour ne rien dire, pourquoi ne pas renommer les fichiers avec leur nouvelle taille ?
Je ne spéculerai pas sur la commande convert puisque je ne l'ai pas sous la main pour vérifier.
Si tu veux vraiment du commentaire, en voilà. Un puriste te ferait remarquer que l'usage veut que les variables s'écrivent en majuscules, que tu n'as pas vérifié le retour de la création du répertoire et qu'en cas de d'absence de fichiers *.jpg, la commande for renvoie *.jpg, qui n'est pas un fichier.
mkdir resized &&
ls *.jpg >/dev/null 2>&1 &&
for IMG in *.jpg
do
convert $IMG -resize 320x240 resized/$IMG
done
Et toujours pour ne rien dire, pourquoi ne pas renommer les fichiers avec leur nouvelle taille ?
convert $IMG -resize 320x240 resized/$( basename $IMG .jpg )-320x240.jpg
Si la dernière commande d'une cascade de commandes ne fonctionne pas, ce n'est pas un problème, on lit le message d'erreur et c'est tout.
Ceci englobe les problèmes de droits et de validité des fichiers. S'il y a trois cents fichiers à traiter et qu'on obtient trois cents fois le message no space left ou cannot create, c'est con, mais les commandes dans la boucle sont indépendantes entre-elles. S'il y a trois cents fichiers à traiter et que la moitié est interdit de lecture, on aura quand même traité l'autre moitié.
En revanche, qu'un fichier puisse avoir un nom à la con, c'est bien plus problématique.
C'est pourquoi on place en général les noms de fichier à la fin des commandes, et pour être sûr, après le signe -- (double-tiret) qui signifie la fin des options.
En passant, la page du manuel indique que la syntaxe de la commande convert de ImageMagick suit cet usage :
Je réécris donc la commande à passer :
L'utilisation des doubles-quotes garantit le bon fonctionnement de la commande avec des noms contenant des espaces ou autres caractères particuliers.
Ceci englobe les problèmes de droits et de validité des fichiers. S'il y a trois cents fichiers à traiter et qu'on obtient trois cents fois le message no space left ou cannot create, c'est con, mais les commandes dans la boucle sont indépendantes entre-elles. S'il y a trois cents fichiers à traiter et que la moitié est interdit de lecture, on aura quand même traité l'autre moitié.
En revanche, qu'un fichier puisse avoir un nom à la con, c'est bien plus problématique.
C'est pourquoi on place en général les noms de fichier à la fin des commandes, et pour être sûr, après le signe -- (double-tiret) qui signifie la fin des options.
En passant, la page du manuel indique que la syntaxe de la commande convert de ImageMagick suit cet usage :
manpagesconvert (1)
SYNOPSIS
convert [ options ... ] file [ file... ] file
SYNOPSIS
convert [ options ... ] file [ file... ] file
Je réécris donc la commande à passer :
convert -resize 320x240 -- "$IMG" "resized/$( basename $IMG .jpg )-320x240.jpg"
L'utilisation des doubles-quotes garantit le bon fonctionnement de la commande avec des noms contenant des espaces ou autres caractères particuliers.
zeb a dit :
En passant, la page du manuel indique que la syntaxe de la commande convert de ImageMagick suit cet usageMême pas vrai. C'est la commande convert de GraphicsMagick. Celle de la dernière version d'ImageMagick est :
convert [input-options] input-file [output-options] output-file
GraphicsMagick étant un fork, c'est normal qu'il utilise les mêmes noms
Et puis, si un des fichiers échoue, peut être faudrai t'il positionner la valeur de retour de l'ensemble à quelque chose de différent de 0
Beurk, c'est pas UNIX compliant, comme ligne de commande, ça !
0 signifie, tout c'est bien passé. Si 299 fichiers sur 300 ont correctement été converti, il faut quand même rendre compte que quelque chose s'est mal déroulé.
Effectivement, notre commande, dans une boucle, renverra le code de la dernière action.
T'es sûr qu'il faut gérer ça ?
Bon![[:spamafote] [:spamafote]]()
0 signifie, tout c'est bien passé. Si 299 fichiers sur 300 ont correctement été converti, il faut quand même rendre compte que quelque chose s'est mal déroulé.
Effectivement, notre commande, dans une boucle, renverra le code de la dernière action.
T'es sûr qu'il faut gérer ça ?
Bon
![[:spamafote] [:spamafote]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/3e/46/spamafote.gif)
{
typeset OK=0
typeset RC=0
mkdir resized &&
ls *.jpg >/dev/null 2>&1 &&
for IMG in *.jpg
do
convert "$IMG" -resize 320x240 "resized/$IMG" &&
OK=1 ||
RC=1
done
[ $RC -eq 1 -a $OK -eq 0 ] && RC=2
( exit $RC )
}
Ouais, ben c'est plus simple avec Shotwell, et plus rapide finalement
Plus sérieusement, ma réponse sur des interfaces graphiques avait pour but de casser le mythe persistent que pour un usage bureautique, Linux impose (toujours) la ligne de commande, pas facile d'accès à un néophyte...
Après je suis tout à fait d'accord, la ligne de commande est souvent le moyen le plus simple et efficace de réaliser une action
Plus sérieusement, ma réponse sur des interfaces graphiques avait pour but de casser le mythe persistent que pour un usage bureautique, Linux impose (toujours) la ligne de commande, pas facile d'accès à un néophyte...
Après je suis tout à fait d'accord, la ligne de commande est souvent le moyen le plus simple et efficace de réaliser une action
Lassé par la pub ? Créez un compte