Convierta un montón de archivos BMP a JPEG en Linux

32

Alguien me envió un montón de archivos BMP y los necesito en JPEG. Podría convertirlos uno por uno usando GIMP, pero prefiero hacerlo todo de una vez. Tengo Ubuntu

JoelFan
fuente

Respuestas:

46

Puede usar la herramienta de mogrificación de ImageMagick

mogrify -format jpg * .bmp
hiperslug
fuente
1
Tenga en cuenta que esta respuesta también funciona para Windows, ya que ImageMagick también está disponible para descargar para Windows.
Gnoupi
Está sudo apt install imagemagicken Ubuntu y puede establecer la calidad agregando-quality 100
mpen
15

Es probable que tenga instalado ImageMagick en Ubuntu.
Eso puede hacer ,

convert filename.bmp filename.jpg

actualizar:

El mogrify(respondido por hyperslugy referido por cjm) también es una buena opción.

Use el programa mogrify para cambiar el tamaño de una imagen, desenfocar, recortar, eliminar el brillo, difuminar, dibujar, voltear, unir, volver a muestrear y mucho más.
Esta herramienta es similar a la conversión, excepto que el archivo de imagen original se sobrescribe
(a menos que cambie el sufijo del archivo con la -formatopción) con cualquier cambio que solicite.

nik
fuente
1
El comando mogrify de ImageMagick es mejor que convertir para esto, porque se puede usar fácilmente con comodines. Ver la respuesta del hiperslug.
cjm
7

Déjame hacer un pequeño cambio en la respuesta salmonmoose:

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

Lo anterior funciona pero genera archivos llamados "bmp.jpg". Puede obtener archivos .jpg con este comando:

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

Ver man bashpara detalles del forcomando. La ${i%bmp}parte significa la cadena "$ {i}" sin la subcadena "bmp" al final.

Hay otras operaciones para transformar la cadena en "$ {i}". "$ i" es una abreviatura de "$ {i}". La ls *.bmpparte en la respuesta salmonmoose significa "ejecutar ls *.bmp, luego la iparte for asigna cada cadena separada por espacios a i". Lo mismo se logra *.bmpporque coincide con todos los nombres de archivo en el directorio.

Hay un inconveniente con for: si los archivos en su directorio tienen espacios en el nombre, por ejemplo "imagen de boda 1.bmp", se asignará 3 veces a la ivar, realizando estos comandos:

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

En mi respuesta también falla la coincidencia "$ {i% bmp}".

Pero hay una solución: puede usar el findcomando en su lugar. Ver man findpara más detalles. Debe escribir algo como lo siguiente (verifique la sintaxis con la página de manual antes de intentarlo):

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

(No estoy muy seguro de la parte del nombre, y tengo algunas dudas en la -execparte, ver man findprimero)

Si desea unir todas las imágenes en un archivo .jpg, puede concatenarlas con otro filtro, como el mencionado en la primera respuesta.

anónimo
fuente
1
for i in `ls *.bmp`; do convert $i $i.jpg; done

Sí, esto hará un montón de archivos llamados filename.bmp.jpg pero hará el trabajo.

salmón
fuente
Uso inútil de ls.
Dmitry Grigoryev