Волшебный CLI в Ubuntu

Называется это средство gm, весит менее 300 кбайт. Однако не ищите пакет gm, это не пакет, а коллекция команд, объединённых командой gm. Главное достоинство: исполнение команды не зависит от  менеджеров дисплея и окон (т.е. от релизов Линукса), чего не скажешь о  многих GUI-шных поделиях. Давайте c помощью эмулятора терминала установим это чудо:

sudo apt-get install imagemagick

Если теперь в эмуляторе терминала ввести команду gm, то увидим вложенные  gm-команды. Посмотрим, чем они могут быть полезны  простому убунтоводу.

Скриншоты
Вам нужно вырезать область экрана и поместить в файл c  расширением png, jpeg, gif и т.д.?  В момент! Жмём Alt+F2 (это стандартный вызов CLI) и набираем:
gm import  pic.jpeg
Или ещё проще, опустив gm:
import  pic.jpg
Здесь pic – произвольное имя файла. На экране появляется курсор в виде креста Вермахта, которым выделяем область экрана и отпускаем кнопку мыши. Готово! По умолчанию картинка сохраняется в домашней папке, и её можно скопировать куда угодно.
Запустив import на выполнение, можно жестом переключиться на другой экран, и вырезать кусок оттуда. При этом не надо выставлять никаких секунд задержки, лихорадочно что-то там препарируя в течение таймаута. Да и поддерживается аж 88 графических форматов. Очень удобно делать вырезки из текста, а также из содержимого окна браузера.
Правда, есть одна неприятность: import нельзя запускать из виртуального терминала, который  вызывают через Ctrl+Alt+F2, так как X-сервер не будет доступен. Но из эмулятора терминала – пожалуйста. Короче, дорогие убунтоводы, убирайте из лончерной панели иконку  скриншотера, она лишняя.
Преобразования форматов
Допустим, имеется документ в PDF, а надо сделать из него  графический файл определённых размеров c расширением png, jpeg, gif и т.д.  Ну, мало ли зачем, например,  требуется закачать материал в виде картинки на сервер. Воспользоваться предыдущей командой нельзя, так как исходный файл целиком на экране не помещается. Для решения проблемы  существуют платные программы и онлайновые сервисы, но можно всё сделать бесплатно и быстро:
convert -density 300x300 -resize 1500x1500 iput_file.pdf output_file.png
Здесь  -density 300x300 – это разрешение выходной картинки по горизонтали-вертикали (72 по умолчанию),  -resize 1500x1500 – её размеры, iput_file.pdf и  output_file.png – входной и выходной файлы соответственно. Несложно, и есть повод потренироваться в написании скрипта на языке bash.
Ещё пример преобразования, он не требует пояснения:
convert image.jpg image.png
Конечно, такое преобразование элементарно делается в любом GUI-ориентированном редакторе графики через File->Save as. Но таким способом трудно преобразовать массу изображений. Чтобы сделать из jpg-картинок в текущем директории png-миниматюры 120х120 и присвоить им имена file01.png, file02.png и т.д.,  выполните команду
convert *.jpg -resize 120x120 file%03d.png
Чтобы из цветного  изображения сделать контрастное чёрно-белое «а-ля Че Гевара» можно воспользоваться таким преобразованием:
convert -threshold 115 in.png out.png


 

Здесь -threshold 115 – это яркостный порог, который может изменяться от 0 до 65535. А вот так можно собрать «гифку» из разрозненных картинок 1.png, 2, png …, хранящихся в текущем директории :
convert *.png images.gif
Команда convert чрезвычайно  богата опциями, которые   подробно изложены здесь.  Любые преобразования! Мало того, команда convert позволяет рисовать  графические примитивы, но рассказ об этом выходит за рамки статьи.
Сравнение изображений
Сравнение изображений требуется не только для развлечений «найди 10 отличий», но и для таких серьёзных вещей, как стеганография, охрана веб-камерой, аутентификация,   научные исследования,  художественные эффекты и многое другое. Команда compare c этими задачами справляется замечательно. Синтаксис команды:
compare [опции...] изображение1 изображение2 изображение-результат
Сила команды в её опциях, они очень обширны, но и без них  команда может быть  полезной. Вот два невинных аватара:
  

Как вы думаете, аватары идентичны? Не надо мудрствовать и писать коды, достаточно сравнить аватары:
compare cat1.png cat2.png cat3.png
Вот как выглядит результат сравнения:
 

Как видим, аватар содержит скрытую информацию. Именно это и послужило  основанием для дальнейшего анализа изображения, которое содержало инструкцию по организации теракта. Террористов  задержали.
Водяные знаки
Допустим, вы – артдизайнер, создали очень прикольные jpg-обои определённого формата и намереваетесь выставить их на продажу. Чтобы защитить авторство, есть простой приём – пометить цифровыми водяными знаками каждую свою обоину. С помощью gm-команды composite это делается очень просто. Из любой обоины создайте белую  обоину stamp.jpg с помощью уже знакомой команды convert:
convert -threshold 0,0 in.jpg stamp.jpg
Здесь  in.jpg – ваше произведение. Любым графическим редактором, например, GIMP'ом, снабдите в одном из углов белый прямоугольник заготовки штампа своей цветной подписью и сохраните файл stamp.jpg. Штамп создаётся однажды, а используется многократно. Наносим водяной знак:
composite -compose bumpmap -gravity southeast stamp.jpg in.jpg art.jpg
Здесь  composite – gm-команда наложения,   bumpmap -gravity southeast – опции команды, art.jpg – результирующий  помеченный опус. Владеющий языком bash или php за несколько минут напишет сценарий, позволяющий проштамовать и пронумеровать все творения, лежащие в папке. Непроштамованные оригиналы хранятся на локальном хосте, а в Сеть выкладываются только проштампованные экземпляры. Чтобы проявился водяной знак, проштампованный файл сравают с непроштампованным:
compare in.jpg art.jpg res.jpg
Файл res.jpg покажет вашу подпись. Примерно так:

Как вы уже, вероятно, догадались, с  помощью водяных знаков можно  стеганографировать без каких-либо специализированных приложений.
Массовое переформатирование
Команда convert, однако, имеет недостаток: исходное изображение  преобразуется, и в текущей папке его больше нет. Если надо сохранять исходные изображения, то лучше воспользоваться другой командой – mogrify. Допустим, имеется множество изображений в формате png и нужно массово преобразовать их в jpg. Это выполняется командой
mogrify    -format jpg  *.png
Здесь  -format jpg – опция, задающая целевой формат. Одновременно с преобразованием формата (или без преобразования) можно массово изменить размеры всех изображений указанного формата, хранящихся в текущей папке:
mogrify -thumbnail 50x50  *.jpg
По-моему, удобно. Можно графическим редактором нарисовать большие красивые картинки и затем наделать из них иконок
Монтаж изображений
Итак, вы разработали красивые иконки и хотите выложить их в Интернет. Для этого сначала надо смонтировать иконки в другую картинку по некоей сетке и уж затем закачать эту картинку на сервер. Специально для этой цели разработана команда montage. Описывать не буду, кому нужно – почитайте, пожалуйста, здесь.

Однако, стоп!
Imagemagick – это мощнейший API для двумерной графики. «Вести» о нём уже упоминали  в статье М.Астапчика «Когда старость в радость», явившейся для автора этих строк толчком к изучению Линукса. С тех пор API imagemagick развился ещё шире. Описать всё богатство этого интерфейса в короткой статье не представляется возможным. Более половины  интересных команд остались вообще незатронутыми. Но если читатель  заинтересовался данным API, то автор считает свою задачу выполненной.
Опираясь на API imagemagick, программисты пишут различные приложения для работы с изображениями и неплохо зарабатывают на этом. Но для простых операций с лихвой хватает и командной строки. Презираете терминал и командную строку? Имеете право. Но если так, то тогда вам, возможно,  придётся потратиться на  платный софт. Успехов!

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 0
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя mike

В черновике форматирование было. Куда исчезло?

Аватар пользователя Al

Да и голосование пропало...

Аватар пользователя mike

И поиск не работает...

mike, просто стараемся все статьи оформлять единообразно, вот его и убрали.