Convertir un tas de fichiers BMP en JPEG sur Linux

32

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

JoelFan
la source

Réponses:

46

Vous pouvez utiliser l'outil de mogrifie d'ImageMagick

mogrify -format jpg * .bmp
hyperslug
la source
1
Notez que cette réponse fonctionne également pour Windows, car ImageMagick peut également être téléchargé pour Windows.
Gnoupi
C'est sudo apt install imagemagicksur Ubuntu et vous pouvez définir la qualité en ajoutant-quality 100
mpen
15

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

convert filename.bmp filename.jpg

mise à jour:

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

Utilisez le programme mogrify pour redimensionner une image, flouter, recadrer, supprimer les taches , tramer , dessiner, retourner, joindre, rééchantillonner et bien plus encore.
Cet outil est similaire à convertir, sauf que le fichier image d'origine est écrasé
(sauf si vous modifiez le suffixe du fichier avec l' -formatoption) avec toutes les modifications que vous demandez.

nik
la source
1
La commande mogrify d'ImageMagick est meilleure que convertir pour cela, car elle peut être utilisée facilement avec des caractères génériques. Voir la réponse d'hyperslug.
cjm
7

Permettez-moi d'apporter un petit changement à la réponse 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 bashpour plus de détails sur la forcommande. La ${i%bmp}partie signifie la chaîne "$ {i}" sans la sous-chaîne "bmp" à la fin.

Il existe d'autres opérations pour transformer la chaîne en "$ {i}". "$ i" est un raccourci pour "$ {i}". La ls *.bmppartie dans la réponse salmonmoose signifie "exécuter ls *.bmp, puis la ipartie for assigne chaque chaîne séparée par des espaces à i". Le même résultat est obtenu par *.bmpcar 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 ivar, en exécutant ces commandes:

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 findcommande à la place. Voir man findpour plus de détails. Vous devez 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 -execpartie, voir d' man findabord)

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.

anonyme
la source
1
for i in `ls *.bmp`; do convert $i $i.jpg; done

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

salmonmoose
la source
Utilisation inutile de ls.
Dmitry Grigoryev