30

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

5 ответов5

42

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

mogrify -format jpg *.bmp
15

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

convert filename.bmp filename.jpg

Обновить:

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

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

6

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

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}" без подстроки "bmp" в конце.

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

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

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, но это сделает работу.

0

Вы можете достичь этого с помощью ImageMagick. В этой ссылке приведены примеры

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .