Конвертируйте кучу файлов BMP в JPEG в Linux

32

Кто-то прислал мне кучу файлов BMP, и они нужны мне в формате JPEG. Я мог бы конвертировать их один за другим, используя GIMP, но я бы предпочел сделать все это за один раз. У меня есть Ubuntu.

JoelFan
источник

Ответы:

46

Вы можете использовать mogrify инструмент ImageMagick

mogrify -формат jpg * .bmp
hyperslug
источник
1
Обратите внимание, что этот ответ работает и для Windows, так как ImageMagick доступен для загрузки и для Windows.
Gnoupi
Это sudo apt install imagemagickна Ubuntu, и вы можете установить качество, добавив-quality 100
mpen
15

Скорее всего, на Ubuntu установлена ​​программа ImageMagick .
Что можно сделать ,

convert filename.bmp filename.jpg

Обновить:

mogrify(Отвечает hyperslugи перенаправлены cjm) также вариант хорошо.

Используйте программу mogrify для изменения размера изображения, размытия, обрезки, удаления пятен, сглаживания, рисования, переворачивания, объединения, повторной выборки и многого другого.
Этот инструмент похож на преобразование, за исключением того, что исходный файл изображения перезаписывается
(если вы не изменяете суффикс файла с помощью -formatопции) с любыми изменениями, которые вы запрашиваете.

Nik
источник
1
Команда mogrify в ImageMagick лучше, чем конвертировать, потому что ее легко использовать с подстановочными знаками. Смотрите ответ гиперслуга.
CJM
7

Позвольте мне немного изменить ответ лосося:

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

Выше работает, но генерирует файлы с именем "bmp.jpg". Вы можете получить файлы .jpg с помощью этой команды:

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

Смотрите man bashподробности forкоманды. ${i%bmp}Часть означает , что строка «$ {я}» без «ВМР» подстроку в конце.

Существуют и другие операции для преобразования строки в «$ {i}». «$ i» - это сокращение от «$ {i}». ls *.bmpЧасть в salmonmoose посредством ответа «выполнить ls *.bmp, то для iчасти правопреемников каждая строка разделенных пробелами до i». То же самое достигается благодаря тому, *.bmpчто оно соответствует всем именам файлов в каталоге.

Недостаток в том, что for- если в именах файлов в вашем каталоге есть пробелы, например «wedding picture 1.bmp», он будет назначен 3 раза в ivar, выполняя следующие команды:

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

В моем ответе также совпадение "$ {i% bmp}" не удалось.

Но есть решение - findвместо этого вы можете использовать команду. Смотрите man findподробности. Вы должны напечатать что-то вроде следующего (пожалуйста, проверьте синтаксис с man-страницей, прежде чем пробовать это):

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

(Я не очень уверен в названии части, и у меня есть некоторые сомнения в -execчасти, см. В man findпервую очередь)

Если вы хотите объединить все изображения в один файл .jpg, вы можете объединить их с другим фильтром, как указано в первом ответе.

анонимный
источник
1
for i in `ls *.bmp`; do convert $i $i.jpg; done

Да, это создаст кучу файлов с именем filename.bmp.jpg, но это сделает работу.

salmonmoose
источник
Бесполезное использование ls.
Дмитрий Григорьев