Уменьшение размеров фотографий в 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 и командная строка замечательно справились с поставленной задачей :)
ivirinka:
Ну наконец-то, дождалась! Спасибо за статью.
Ответить
Igorka Reply:
мая 18, 2010 at 11:32
Всегда пожалуйста!
А что нужно тоже в работе?
Ответить
ivirinka Reply:
мая 19, 2010 at 22:34
еще как! Ты ж мне тогда для Windows посоветовал рисайзер, а теперь нужен был еще и для Линукс
Ответить
Igorka: Как в Ubuntu cохранить звук из видео файла:
[...] не сложнее чем уменьшать размер фотографий [...]
5 августа 2010, 16:49Константин:
Есть и простое графическое средство для уменьшения фотографий: http://simple-image-reducer.org.ua/
Ответить
15 декабря 2010, 0:42Igorka: Изменение размеров фотографий в Nautilus:
[...] статье Уменьшение размеров фотографий в Linux я писал о примерах использования утилиты convert для [...]
21 декабря 2010, 10:49