Converta vários arquivos BMP em JPEG no Linux

32

Alguém me enviou um monte de arquivos BMP e eu preciso deles em JPEG. Eu poderia convertê-los um por um usando o GIMP, mas prefiro fazer tudo de uma só vez. Eu tenho o Ubuntu.

JoelFan
fonte

Respostas:

46

Você pode usar a ferramenta mogrify do ImageMagick

formato mogrify jpg * .bmp
hyperslug
fonte
1
Observe que esta resposta também funciona para o Windows, pois o ImageMagick também está disponível para download no Windows.
Gnoupi
Está sudo apt install imagemagickno Ubuntu e você pode definir a qualidade adicionando-quality 100
mpen
15

É provável que você tenha o ImageMagick instalado no Ubuntu.
Isso pode fazer ,

convert filename.bmp filename.jpg

atualizar:

O mogrify(respondido por hypersluge referido por cjm) também é uma boa opção.

Use o programa mogrify para redimensionar uma imagem, desfocar, cortar, remover manchas, pontilhar, desenhar, inverter, juntar-se, obter novamente amostras e muito mais.
Essa ferramenta é semelhante à conversão, exceto que o arquivo de imagem original é substituído
(a menos que você altere o sufixo do arquivo com a -formatopção) com as alterações solicitadas.

nik
fonte
1
O comando mogrify do ImageMagick é melhor que converter para isso, porque pode ser usado facilmente com caracteres curinga. Veja a resposta de hyperslug.
Cjm 21/08/2009
7

Deixe-me fazer uma pequena alteração na resposta salmonmoose:

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

O acima funciona, mas gera arquivos chamados "bmp.jpg". Você pode obter arquivos .jpg com este comando:

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

Veja man bashpara detalhes do forcomando. A ${i%bmp}parte significa a sequência "$ {i}" sem a substring "bmp" no final.

Existem outras operações para transformar a string em "$ {i}". "$ i" é uma abreviação de "$ {i}". A ls *.bmpparte da resposta salmonmoose significa "executar ls *.bmp, então a iparte for atribui cada sequência separada por espaços a i". O mesmo é alcançado *.bmpporque corresponde a todos os nomes de arquivos no diretório

Existe uma desvantagem com for- se os arquivos em seu diretório tiverem espaços no nome, por exemplo "wedding picture 1.bmp", ele será atribuído 3 vezes ao ivar, executando estes comandos:

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

Na minha resposta também a correspondência "$ {i% bmp}" falha.

Mas existe uma solução - você pode usar o findcomando. Veja man findpara detalhes. Você deve digitar algo como o seguinte (verifique a sintaxe com a página de manual antes de tentar):

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

(Não tenho muita certeza da parte do nome e tenho alguma dúvida na -execparte, veja man findprimeiro)

Se quiser juntar todas as imagens em um arquivo .jpg, você pode concatená-las com outro filtro, como o mencionado na primeira resposta.

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

Sim, isso criará um monte de arquivos chamados filename.bmp.jpg, mas fará o trabalho.

salmonmoose
fonte
Uso inútil de ls.
Dmitry Grigoryev