Уменьшение размеров фотографий в Linux

Некоторое время назад в статье Уменьшаем размер графических файлов я рассказал об утилите от Microsoft - Image Resizer. Там речь идет о групповом уменьшении графических файлов. Сегодня решил посмотреть как можно уменьшить размер фотографий в Linux, а в моем случае в Ubuntu. Иногда возникает необходимость уменьшить фотографии или сканированные копии документов. Запускать для этого виртуальную машину с Windows, как то не совсем эффективно :)

Сначала решил посмотреть в справке, что предлагается по умолчанию:

1
$ apropos image

Команда apropos позволяет выдать список разделов справки, где встречается указанное ключевое слово. Меня заинтересовала следующая строка:

1
2
3
...
convert (1) - convert between image formats as well as resize an image...
...

Справка по команде convert в итоге привела меня на сайт ImageMagick. Как сказано на сайте ImageMagick - это пакет программ, который предназначен для обработки растровых (точечных) изображений. Кроме команды convert туда входит еще несколько команд для работы с изображениями.

Там же на сайте нашел пример по уменьшению размера графического файла:

1
$ convert rose.jpg -resize 50% rose.png

Имея некоторые начальные познания в bash, благодаря курсам Linux, которые проходил в прошлом году, написал такую вот команду для группового или пакетного уменьшения размера фотографий:

1
$ i=BMP; for filename in *.$i; do convert "$filename" -resize 50% "${filename/.$i/.jpg}"; done

Если нужно уменьшить фотографии которые больше определенного размера, например уменьшить рисунки размер которых больше мегабайта, то можно записать так (если в каталоге только графические файлы):

1
$ find -size +1M | while read filename; do convert "$filename" -resize 50% "$filename"; done

или так если нужно отфильтровать по расширению файла:

1
$ find *.jpg -size +1M | while read filename; do convert "$filename" -resize 50% "$filename"; done

Проверить решил на пяти скан-копиях документов, который хранились в формате bmp и имели размер около 8 Мб каждая:

1
2
3
4
5
6
7
$ ls -l
итого 42480
-rwxr-xr-x 1 igor igor 8698438 2010-05-17 12:11 Изображение0012.BMP
-rwxr-xr-x 1 igor igor 8698438 2010-05-17 12:11 Изображение0013.BMP
-rwxr-xr-x 1 igor igor 8698438 2010-05-17 12:11 Изображение0014.BMP
-rwxr-xr-x 1 igor igor 8698438 2010-05-17 12:11 Изображение0015.BMP
-rwxr-xr-x 1 igor igor 8698438 2010-05-17 12:11 Изображение0016.BMP

Чтобы вышеприведенной командой уменьшить размер данных изображений, нужно зайти в каталог с изображениями и выполнить команду. В результате в этой же папке получим пять файлов в формате jpg и с уменьшенным размером в пикселах на 50%. В килобайтах результат получился таким:

1
2
3
4
5
6
$ ls -l | grep jpg
-rw-r--r-- 1 igor igor  670249 2010-05-17 12:13 Изображение0012.jpg
-rw-r--r-- 1 igor igor  608555 2010-05-17 12:13 Изображение0013.jpg
-rw-r--r-- 1 igor igor  267316 2010-05-17 12:13 Изображение0014.jpg
-rw-r--r-- 1 igor igor  471709 2010-05-17 12:13 Изображение0015.jpg
-rw-r--r-- 1 igor igor  378770 2010-05-17 12:13 Изображение0016.jpg

Небольшое пояснение к команде. i=BMP; - здесь задается расширение графических файлов, которые нужно преобразовать. Если это будут файлы jpg, то нужно написать i=jpg; Фрагмент “${filename/.$i/.jpg}”. Здесь идет замена имени файла. Вместо .BMP, будет в имени .jpg. Это делается для того, чтобы сохранить исходные файлы или выполнить преобразование между форматами.

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

1
$ i=jpg; for filename in *.$i; do convert "$filename" -resize 50% "$filename"; done

В этом случае оригиналы будут заменены уменьшенными копиями.

Если копии нужно сохранить, можно написать так:

1
$ i=jpg; for filename in *.$i; do convert "$filename" -resize 50% "${filename/.$i/_small.jpg}"; done

Еще один пример. Поиск файлов в текущем каталоге и его подкаталогах, с расширением .bmp и размером более 2 мегабайт, конвертация найденных рисунков в jpeg и удаление файлов .bmp в случае успешной конвертации. ВНИМАНИЕ! Перед тем как выполнять команду ниже, протестируйте ее сначала на тестовой выборке. Пример был проверен на Ubuntu 9.10.

1
$ find . -name "*.bmp" -size +2M | while read filename; do convert "$filename" "${filename/.bmp/.jpg}" && rm "$filename"; done

Может быть есть и графическое средство с помощью которого можно уменьшить размер изображений в Linux, но искать не стал - команда convert и командная строка замечательно справились с поставленной задачей :)

Статьи и новости схожей тематики:

Комментариев: 6

  1. ivirinka:

    Ну наконец-то, дождалась! Спасибо за статью.

    Ответить

    Igorka Reply:

    Всегда пожалуйста!
    А что нужно тоже в работе?

    Ответить

    ivirinka Reply:

    еще как! Ты ж мне тогда для Windows посоветовал рисайзер, а теперь нужен был еще и для Линукс

    Ответить

  2. Igorka: Как в Ubuntu cохранить звук из видео файла:

    [...] не сложнее чем уменьшать размер фотографий [...]

  3. Константин:

    Есть и простое графическое средство для уменьшения фотографий: http://simple-image-reducer.org.ua/

    Ответить

  4. Igorka: Изменение размеров фотографий в Nautilus:

    [...] статье Уменьшение размеров фотографий в Linux я писал о примерах использования утилиты convert для [...]

Оставьте свой отзыв