Если вы не знаете, что такое ImageMagick, это один из лучших инструментов, которые вы могли бы иметь на своем компьютере, для управления изображениями и некоторыми другими типами файлов. В этом посте я собираюсь перечислить несколько команд, которые могут пригодиться в самых разных ситуациях.

Недавно у меня появилась возможность поработать над проектом, в котором нужно было манипулировать множеством изображений - менять разрешение и контролировать размер файла. Я написал сценарий на PHP, и ImageMagick был лучшим оружием. Прежде чем читать дальше, если вы не знакомы с ImageMagick и функциями, которые он предлагает, сначала посетите их веб-сайт.

Кроме того, я хотел бы отметить, что это больше для личного ознакомления, так что через несколько месяцев, когда я забуду команды или мне нужно будет манипулировать другими изображениями, я смогу вернуться сюда и получить все нужные мне команды.

Еще одна вещь, я работаю с Ubuntu - мой персональный ноутбук работает под управлением Ubuntu, мой рабочий ноутбук работает под управлением Ubuntu, мой личный экземпляр AWS EC2 работает под управлением Ubuntu, и почти все облачные компьютеры, на которых я работаю, работают под управлением Ubuntu. Таким образом, все приведенные ниже команды протестированы на Ubuntu (если быть точным, 16.04).

Тогда приступим, ладно?

Изменить разрешение изображения

Это, я думаю, одна из самых простых операций с изображениями, которые мы бы сделали. Таким образом, команда довольно проста для понимания и запоминания даже для нетехнического специалиста.

Допустим, у нас есть изображение с именем image.jpg размером около 2816x2112 пикселей, то есть как изображение с разрешением 6 МП. Если вы хотите уменьшить это значение до 1024x768 пикселей, сделайте это так:

convert image.jpg -resize 1024x768 output_file.jpg

Вот и все. У вас будет новое изображение с именем output_file.jpg, разрешение которого примерно равно 1024x768 пикселей. Я говорю близкое к этому разрешению, потому что по умолчанию ImageMagick пытается сохранить соотношение сторон. Поэтому, если указанное вами разрешение не поддерживает исходное соотношение сторон изображения, ImageMagick будет использовать разрешение, близкое к указанному вами, при сохранении соотношения сторон.

Но это поведение по умолчанию легко изменить. Вы можете использовать символ « с разрешением, чтобы сообщить ImageMagick, что разрешение должно строго соблюдаться. Теперь команда будет выглядеть так:

convert image.jpg -resize 1024x768! output_file.jpg

Но это может не всегда работать так, как вы ожидаете. Потому что в системах * nix символ ! имеет особое значение. Чтобы убедиться, что ничего забавного не происходит и все работает должным образом, вам нужно «экранировать» ! в команде. Вы можете сделать это, добавив ‘\’ перед ! следующим образом:

convert image.jpg -resize 1024x768\! output_file.jpg

Вот и все. Если ваш входной файл image.jpg не поврежден, теперь у вас будет новое изображение с указанным вами разрешением. Это так просто.

Уменьшение размера файла изображения или снижение качества изображения

Если вы разработчик, который создает веб-приложение с большим количеством изображений, вы знаете, насколько важен размер файла. На вашей веб-странице не может быть изображения размером 5 МБ, загрузка которого займет много времени. Это приведет к ужасному пользовательскому опыту. Решение состоит в том, чтобы размер файла был как можно меньше. Когда дело доходит до изображений, «сжатие» изображения является наиболее распространенным методом для уменьшения размера файла. Это можно сделать двумя способами - уменьшить разрешение изображения (о чем мы уже говорили) и уменьшить «качество» изображения.

Поскольку мы уже обсуждали, как уменьшить разрешение изображения, давайте посмотрим, как можно снизить качество изображения. ImageMagick предоставляет простой вариант с помощью команды convert для установки качества изображения. Сделать это можно так:

convert image.jpg -quality 75 output_file.jpg

Эта команда уменьшит размер файла размером 3 МБ до менее 300 КБ. Параметр качества 75, предоставленный в команде, можно рассматривать как снижение качества изображения до 75% или на 25%.

Для изображений JPG (JPEG) качество варьируется от 1 до 100. 1 обеспечивает максимальное сжатие, но низкое качество изображения, а 100 обеспечивает максимальное качество изображения, но не обеспечивает хорошее сжатие. Вы можете определить качество входного файла, в противном случае значение по умолчанию - 92.

Эксперты также говорят, что 75 - это лучший компромисс между качеством изображения и сжатием, и в большинстве случаев он выполняет свою работу. Для других типов изображений (например, PNG) есть много других параметров, которые можно использовать с параметром -quality. Чтобы узнать больше об этом, взгляните на официальную документацию, и вы будете поражены возможностями.

Создать коллаж из изображений (монтаж)

Другой вариант использования - создание коллажей из изображений. В наши дни мы часто видим подобные изображения в социальных сетях. Если вы из тех, кто делает коллажи, вам понравится эта команда. Больше не нужно загружать изображения на веб-сайты и ждать, пока они конвертируются, а затем загружать их снова. Теперь вам даже не нужно передавать свои изображения кому-либо еще.

Допустим, у вас есть четыре изображения, и вы хотите создать коллаж 2x2 из этих четырех изображений. Вы используете следующую команду:

montage image1.jpg image2.jpg image3.jpg image4.jpg output_montage.jpg

Будет создано новое изображение с именем output_montage.jpg, но оно может выглядеть не так, как вы ожидали - в нем будут четыре очень маленьких изображения, расположенных в матрице 2x2. Размер изображений будет изменен в соответствии с параметрами по умолчанию, которые использует команда montage: «-geometry 120x120› + 4 + 3 ». Что это значит? Это означает, что независимо от разрешения входного изображения измените его размер до изображения 120x120 пикселей и используйте его для создания коллажа. Чтобы переопределить это поведение, вы можете просто указать в команде параметр -geometry.

Также существует команда -tile, с помощью которой вы можете указать, сколько плиток вам нужно. Но если вы не знаете этого конкретно и просто хотите получить коллаж из ваших изображений, вы можете позволить ImageMagick определить наилучшее возможное расположение плиток.

Итак, чтобы получить наилучший коллаж из ваших четырех изображений, используйте эту команду с параметром -geometry:

montage image1.jpg image2.jpg image3.jpg image4.jpg -geometry +2+2 output_montage.jpg

Я уверен, что вам понравится результат. Дайте мне знать. :)

Еще один способ создать коллаж из изображений

Вы можете использовать опцию «добавить», чтобы создать коллаж из изображений с помощью инструмента монтажа. Команда выглядит как

montage -mode concatenate -tile 1x image1.jpg image2.jpg output_montage.jpg

Эта команда создаст вертикальный коллаж из двух изображений.

Преобразование изображения в PDF

Это еще одна наиболее частая задача, с которой мы часто сталкиваемся. И я должен сказать, что преобразование изображений в PDF-файлы - одна из самых простых команд, предоставляемых ImageMagick. Предположим, вы хотите преобразовать этот потрясающий коллаж 2x2, который вы создали ранее, в PDF-файл. Как ты это делаешь? Нравится:

convert output_montage.jpg output_montage.pdf

Разве это не было просто? Давай, попробуй.

Бонус: объединение файлов PDF

Вы можете подумать, что можете легко объединить несколько файлов PDF в один, используя команду convert, например:

convert pdf1.pdf pdf2.pdf output_pdf.pdf

Вы действительно можете. Но не надо! Это связано с тем, что если ваши входные файлы имеют размер 10 МБ каждый, размер выходного файла будет близок к 1 ГБ. Это очень и очень плохо. Итак, чтобы объединить несколько файлов PDF, я дам вам другую команду с помощью другого инструмента под названием GhostScript. В большинстве систем * nix предустановлен GhostScript. Если он еще не установлен, перейдите на их веб-сайт, чтобы получить инструкции по установке.

Теперь вы можете легко объединить файлы PDF в один файл с помощью команды:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=temp.pdf pdf1.pdf pdf2.pdf

Не беспокойтесь о том, что означает каждый вариант, если вы не технический специалист и не хотите знать, как он работает. На сайте есть вся необходимая информация.

Большинство языков программирования поставляются с поддержкой ImageMagick, либо встроенной, либо с несколькими сторонними пакетами. Но вы можете обязательно использовать эти команды в своем проекте в следующий раз, когда вам придется работать с изображениями.

ImageMagick также имеет возможности работы с большими двоичными объектами. Таким образом, вы можете просто получить строку изображения base64 и работать с ней. Это действительно очень универсально и удобно.

Надеюсь, это было полезно. Дайте мне знать в комментариях, если я допустил здесь какую-либо ошибку, или если у вас есть еще какие-то крутые команды.