Comment redimensionner les images par lots dans Ubuntu récursivement dans le terminal?

J'ai plusieurs images stockées dans un ensemble de dossiers organisés. J'ai besoin de redimensionner ces images à un pourcentage spécifique récursivement de leur répertoire parent. Je cours Ubuntu 11.10 et je préfère apprendre à le faire directement à partir du terminal.

31
demandé sur CompilingCyborg 2012-05-29 19:55:44

7 réponses

Vous pouvez utiliser imagemagick. Par exemple, pour redimensionner toutes les images JPG sous le répertoire courant à 50% de leur taille d'origine, vous pouvez faire:

for f in `find . -name "*.jpg"`
do
    convert $f -resize 50% $f.resized.jpg
done

Les fichiers résultants auront ".jpg" deux fois dans leurs noms. Si c'est un problème, vous pouvez vérifier les solutions suivantes.

Pour parcourir/trouver les fichiers à redimensionner, vous pouvez également utiliser xargs . Exemple:

find . -name "*.jpg" | xargs convert -resize 50%

Cela va créer des copies des images. Si vous voulez juste les convertir au lieu de, vous pouvez utiliser:

find . -name "*.jpg" | xargs mogrify -resize 50%
66
répondu betabandido 2015-06-09 14:35:40

Étendre la réponse de @betabandido

Dans le cas où il y a des espaces dans les noms de fichiers ou les noms de dossiers dans lesquels les images sont, alors il faut utiliser -print0 avec find et -0 avec xargs pour éviter toute erreur d'analyse.

find . -name "*.jpg" -print0 | xargs -0 convert -resize 50%
find . -name "*.jpg" -print0 | xargs -0 mogrify -resize 50%
4
répondu Gaurav Goyal 2015-10-29 19:13:07

Cela fonctionne également si vous donnez la nouvelle résolution de redimensionnement :

convert $f.jpg -size 1024x768 $f.resized.png
1
répondu Ritter 2013-05-30 13:47:29

Vous pouvez également utiliser

sudo apt-get install nautilus-image-converter

Mais cela ne fonctionne que pour l'image dans le dossier actuel. Vous venez d'installer, puis faites un clic droit sur une image ou plusieurs et choisissez la taille que vous voulez et c'est tout.

Je crois que cela utilise également imagemagick.

0
répondu stefanbc 2013-11-19 09:23:40

Vous pouvez utiliser l'outil imagemagick pour le redimensionnement par lots.

Il maintiendra le rapport d'aspect

$ convert dragon.gif    -resize 64x64  resize_dragon.gif

Il ne conservera pas le rapport d'aspect

$ convert dragon.gif    -resize 64x64\!  exact_dragon.gif

$ cat resize.sh 
#!/bin/bash
for f in `find . -name "*.jpg"`
do
    convert $f -resize 45x60\!  $f.resize.jpg
done

Il redimensionnera l'image à 45x60 sans maintenir le rapport d'aspect dans le répertoire courant.

0
répondu Sarvsav Sharma 2014-05-28 13:00:56

Il y a quelques réponses comme:

find . -name "*.jpg" | xargs convert -resize 50%

Cela ne fonctionnera pas car cela élargira la liste comme ceci: convert -resize 50% a.jpg b.jpg c.jpg, qui va redimensionner a.jpg dans c-0.jpg, b.jpg dans c-1.jpg et laissez - c.jpg intacte.

Vous devez donc exécuter la commande redimensionner pour chaque correspondance, et donner à la fois le nom du fichier d'entrée et le nom du fichier de sortie, avec quelque chose comme:

find . -name "*.jpg" | xargs -n 1 sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')'

Chaque correspondance de find est transmise individuellement par xargs -n 1 au script de redimensionnement: sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')'. Ce script reçoit le nom du fichier dans l'argument $0, utilise sed pour créer un nom de fichier de sortie en remplaçant le suffixe .jpg d'origine par un suffixe -th.jpg. Et il exécute la commande convert avec ces deux noms de fichiers.

Voici la version sans xargs Mais find -exec:

find -name '*.jpg' -exec sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')' {} \;
0
répondu loic.jaouen 2015-11-12 00:10:57

Vous pouvez copier/coller ce code dans ubuntu, et l'Enregistrer sous "resize.sh"

#!/ bin / bash-e

CUR_DIR= ' pwd '

Cd $ 1

#redimensionner

Pour le fichier dans *.jpg;

Do

Convertir $fichier -redimensionner 50% $fichier;

Fait

Cd $ CUR_DIR

Après avoir enregistré ce fichier, exécutez-le à partir du terminal en utilisant "./rotate.sh folder_containing_images "

Pour plus de ce genre de choses, visitez ici

-1
répondu vin 2017-03-31 20:24:43