Converti un sacco di file BMP in JPEG su Linux


32

Qualcuno mi ha inviato un mucchio di file BMP e ne ho bisogno in JPEG. Potrei convertirli uno per uno usando GIMP, ma preferirei farlo tutto in una volta. Ho Ubuntu.

Risposte:


46

Puoi usare lo strumento mogrify di ImageMagick

mogrify -format jpg * .bmp

1
Nota che questa risposta funziona anche per Windows, poiché ImageMagick è disponibile per il download anche per Windows.
Gnoupi,

È sudo apt install imagemagicksu Ubuntu e puoi impostare la qualità aggiungendo-quality 100
mpen

15

È probabile che ImageMagick sia installato su Ubuntu.
Questo può fare ,

convert filename.bmp filename.jpg

aggiornare:

Anche la mogrify(risposta di hypersluge indicata da cjm) è una buona opzione.

Usa il programma mogrify per ridimensionare un'immagine, sfocare, ritagliare, despeckle, dithering, disegnare, capovolgere, unire, ripetere il campionamento e molto altro.
Questo strumento è simile alla conversione, tranne per il fatto che il file di immagine originale viene sovrascritto
(a meno che non si cambi il suffisso del file con l' -formatopzione) con qualsiasi modifica richiesta.


1
Il comando mogrify di ImageMagick è meglio che convertirlo per questo, perché può essere facilmente utilizzato con i caratteri jolly. Vedi la risposta di hyperslug.
cjm

7

Vorrei fare un piccolo cambiamento alla risposta salmonmoose:

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

Quanto sopra funziona ma genera file denominati "bmp.jpg". Puoi ottenere file .jpg con questo comando:

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

Vedere man bashper i dettagli del forcomando. La ${i%bmp}parte indica la stringa "$ {i}" senza la sottostringa "bmp" alla fine.

Esistono altre operazioni per trasformare la stringa in "$ {i}". "$ i" è una scorciatoia per "$ {i}". La ls *.bmpparte nella risposta salmonmoose significa "esegui ls *.bmp, quindi la iparte for assegna ogni stringa separata da spazi a i". Lo stesso si ottiene *.bmpperché corrisponde a tutti i nomi di file nella directory.

C'è un inconveniente con for- se i file nella tua directory hanno spazi nel nome, ad esempio "wedding picture 1.bmp", verrà assegnato 3 volte al ivar, eseguendo questi comandi:

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

Nella mia risposta anche la corrispondenza "$ {i% bmp}" non riesce.

Ma c'è una soluzione: puoi invece usare il findcomando. Vedi man findper i dettagli. Dovresti digitare qualcosa di simile al seguente (controlla la sintassi con la pagina man prima di provarla):

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

(Non sono molto sicuro della parte del nome e ho qualche dubbio nella -execparte, vedi man findprima)

Se vuoi unire tutte le immagini in un file .jpg, puoi concatenarle con altri filtri, come quello menzionato nella prima risposta.


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

Sì, questo renderà un mucchio di file chiamato nomefile.bmp.jpg ma farà il lavoro.


Uso inutile di ls.
Dmitry Grigoryev il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.