web-dev-qa-db-fra.com

Convertir un grand nombre de fichiers BMP en fichiers JPEG sous Linux

Quelqu'un m'a envoyé un tas de fichiers BMP et j'en ai besoin au format JPEG. Je pourrais les convertir un à un en utilisant GIMP, mais je préférerais tout faire en une fois. J'ai Ubuntu.

30
JoelFan

Vous pouvez utiliser l'outil mogrify d'ImageMagick

 mogrify -format jpg * .bmp 
42
hyperslug

Vous êtes susceptible d'avoir ImageMagick installé sur Ubuntu.
Cela peut faire ,

convert filename.bmp filename.jpg

mettre à jour:

Le mogrify (répondu par hyperslug et référencé par cjm) est également une bonne option.

Utilisez le programme mogrify pour redimensionner une image, rendre un flou, un rognage, un flou, un tramage, un tracé, un retournement, une jointure, un nouvel échantillonnage, etc.
Cet outil est similaire à convertir sauf que le fichier image d'origine est écrasé.
(sauf si vous modifiez le suffixe du fichier avec l'option -format) avec les modifications que vous demandez.

15
nik

Permettez-moi de changer un peu la réponse de salmonmoose:

for i in `ls *.bmp`; do convert $i $i.jpg; done

Ce qui précède fonctionne mais génère des fichiers nommés "bmp.jpg". Vous pouvez obtenir des fichiers .jpg avec cette commande:

for i in *.bmp; do convert ${i} ${i%bmp}jpg; done

Voir man bash pour plus de détails sur la commande for. La partie ${i%bmp} signifie la chaîne "$ {i}" sans la sous-chaîne "bmp" à la fin.

Il existe d'autres opérations pour transformer la chaîne dans "$ {i}". "$ i" est un raccourci pour "$ {i}". La partie ls *.bmp dans salmonmoose answer signifie "exécutez ls *.bmp, puis la partie for i affecte chaque chaîne séparée par des espaces à i". La même chose est obtenue par *.bmp car il correspond à tous les noms de fichiers du répertoire.

Il y a un inconvénient avec for - si les fichiers de votre répertoire ont des espaces dans le nom, par exemple "wedding picture 1.bmp", il sera attribué 3 fois à la i var en effectuant les commandes suivantes:

convert wedding wedding.jpg 
convert picture picture.jpg
convert 1.bmp  1.bmp.jpg

Dans ma réponse, la correspondance "$ {i% bmp}" échoue également.

Mais il existe une solution: vous pouvez utiliser la commande find à la place. Voir man find pour plus de détails. Vous devriez taper quelque chose comme ceci (veuillez vérifier la syntaxe avec la page de manuel avant de l'essayer):

find -name *.bmp -type f -exec convert '{}' '{}'.jpg \;

(Je ne suis pas très sûr de la partie nom et j'ai un doute dans la partie -exec, voir man find en premier)

Si vous souhaitez joindre toutes les images dans un fichier .jpg, vous pouvez les concaténer avec un autre filtre, comme celui mentionné dans la première réponse.

7
anonymous
for i in `ls *.bmp`; do convert $i $i.jpg; done

Oui, cela créera un tas de fichiers appelés filename.bmp.jpg mais cela fera l'affaire.

1
salmonmoose

Vous pouvez y parvenir à l'aide d'ImageMagick. Dans ce lien sont des exemples

0
Matias