Se connecter avec
S'enregistrer | Connectez-vous

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...

Autres pages sur : conversion images volee

Lassé par la pub ? Créez un compte

Meilleure solution

  1. mkdir resized
  2. for img in *.jpg; do convert $img -resize 320x240 resized/$img; done

comme ça à l'arrache. J'ai pas testé, mais ça devait ressembler à ça quand je l'avais fait.

oh et bien-sur il faut imagemagick (ou équivalent), sinon c'est pas drôle.

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.

  1. mkdir resized &&
  2. ls *.jpg >/dev/null 2>&1 &&
  3. for IMG in *.jpg
  4. do
  5. convert $IMG -resize 320x240 resized/$IMG
  6. done


Et toujours pour ne rien dire, pourquoi ne pas renommer les fichiers avec leur nouvelle taille ?
  1. convert $IMG -resize 320x240 resized/$( basename $IMG .jpg )-320x240.jpg


:D 

Et que se passe t'il si jamais il y a un fichier qui s'appelle '-write tamere.jpg tasoeur.jpg' ?

Et tu ne vérifie pas non plus que la commande convert à fonctionné. Ça se trouve il n'y a plus de place, t'a pas le droit de lire le fichier et de toute façon ça n'est pas un jpg valide ;) 

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 :
manpagesconvert (1)
SYNOPSIS
convert [ options ... ] file [ file... ] file


Je réécris donc la commande à passer :
  1. 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.

:o  ;) 

zeb a dit :
En passant, la page du manuel indique que la syntaxe de la commande convert de ImageMagick suit cet usage

Même pas vrai. C'est la commande convert de GraphicsMagick. Celle de la dernière version d'ImageMagick est :
  1. convert [input-options] input-file [output-options] output-file

GraphicsMagick étant un fork, c'est normal qu'il utilise les mêmes noms :o  ;) 

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]
  1. {
  2. typeset OK=0
  3. typeset RC=0
  4. mkdir resized &&
  5. ls *.jpg >/dev/null 2>&1 &&
  6. for IMG in *.jpg
  7. do
  8. convert "$IMG" -resize 320x240 "resized/$IMG" &&
  9. OK=1 ||
  10. RC=1
  11. done
  12. [ $RC -eq 1 -a $OK -eq 0 ] && RC=2
  13. ( exit $RC )
  14. }


:D 

Ouais, ben c'est plus simple avec Shotwell, et plus rapide finalement :D 

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 ;) 

Nan. C'est plus simple avec une ligne de commande.

Les vérifications et les retours d'erreur sont à ajouter si l'on souhaite faire un script de la meilleure solution proposée par Batchy !

[:dictateur]

zeb a dit :
Nan. C'est plus simple avec une ligne de commande.

Les vérifications et les retours d'erreur sont à ajouter si l'on souhaite faire un script de la meilleure solution proposée par Batchy !

[:dictateur] [:intégriste]



:jap: 
Lassé par la pub ? Créez un compte