Работа с готовыми изображениями – достаточно распространенное явление в веб-программировании. Построение обычной веб-галереи требует создания уменьшенных копий картинок, компрессии, конвертации формата, а возможно, и некоторых других операций по их обработке. Идеальное, на мой взгляд, средство для решения подобных задач – графический пакет ImageMagick.
Для подобных действий также широко применяется библиотека GD, имеющая в арсенале своей второй версии , довольно внушительный список функций.
Работать с GD можно посредством PHP, Perl, Tcl и некоторых других языков. Она имеет широкие возможности, но качество результирующих изображений часто оставляет желать лучшего. Кроме того, такие действия, как изменение пропорций, «обрезка» изображения, манипуляции с цветами, вставка другого рисунка, хоть и возможны, но крайне неудобны.
Здесь на помощь приходит пакет ImageMagick (http://imagemagick.org), представляющий прекрасное средство для обработки изображений. Работа с ним возможна посредством интерфейсов для различных языков программирования (Perl, Python, PHP, C). Сегодня мы рассмотрим способы и приёмы работы с графикой PHP с использованием пакета ImageMagick.
How to download & install ImageMagick on Windows 7/8/10
Что представляет собой ImageMagick?
Коротко поясню, чем является этот пакет и какие задачи можно решить с его помощью. Вообще говоря, я использую не совсем детерминированный термин «пакет», хотя данный продукт называют обычно библиотекой и даже утилитой.
На самом деле это согласованный (что немаловажно) набор утилит для работы с графикой, причём в полном соответствии с идеологией каждая из них выполняет свою задачу. Конечно, возможности ImageMagick не могут сравниться с потенциалом графического процессора, но для наших задач это и не нужно. Если вы пользователь *nix-операционной системы, то ImageMagick у вас, скорее всего, уже установлен или по крайней мере присутствует в дистрибутиве. В противном случае забираем его по адресу http://www.imagemagick.org/script/download.php (присутствуют также версии для Windows и MacOS).
Для PHP-разработчика есть два основных пути работы с изображениями с помощью ImageMagic: выполнять команды пакета, пользуясь функцией exec() (или system()), или использовать класс imagick из репозитария PEAR. Большинство программистов применяют именно первый подход. Причины этого очевидны – любая работа с графикой означает довольно существенное потребление ресурсов веб-сервера, а дополнительный интерфейс, как бы хорошо он ни был написан, эту нагрузку отнюдь не уменьшает. Правда, в последнее время появился повод пересмотреть эту точку зрения, но об этом чуть позже. Кроме того, прямой вызов команд пакета даёт доступ ко всем его возможностям.
Конечно, у данного метода есть и недостатки. У скриптов, вернее, у пользователя, от имени которого они запускаются, должны быть соответствующие права, но проблемы безопасной и эффективной работы веб-сервера мы в данный момент не обсуждаем. Основные возможности пакета будем рассматривать, предполагая, что его команды запускаются именно таким образом.
ImageMagick — better than you know
Наверное, самая часто используемая утилита ImageMagic – это convert. Её возможности мы продемонстрируем на достаточно типовой задаче конвертации графических файлов из одного формата в другой. Вот как просто проходит эта операция:
// исходный файл
$primary=»test.jpg»;
// имя нового файла
$secundary =»test2.gif»;
exec(«convert «. $primary.» » test2.gif);
Вот и всё! Под именем test2.gif мы получили копию исходного изображения в новом формате.
Разумеется, продемонстрированная функциональность довольно скромна, но в справке по convert можно найти более 150 (!) опций этой утилиты, ознакомившись с которыми, начинаешь понимать, почему в названии пакета присутствует слово magick.
Скажем, уменьшить вес картинки можно, просто включив одну из опций:
exect(«convert «. $primary.» -resize 30% «. test.gif);
Не отступая от традиции, для примера работы библиотеки я взял (не очень качественную) фотографию (рис. 1).
Рисунок 1. Исходное фото
Картинка (в формате jpg) занимает 124 Kb. После вышеприведённого преобразования получаем рисунок в формате gif (рис. 2), «весящий» уже 37 Kb.
Рисунок 2. Уменьшаем «вес» фотографии
Конечно, потеря качества есть, но любой человек, работавший до этого с GD, признает результат замечательным. Воспользуемся какой-нибудь ещё возможностью convert, например, изменим цвета оригинала:
exect(«convert «. $primary.» -coloreze 0, 0, 50 «. test2.gif);
результат на рис. 3.
Рисунок 3. Экспериментируем с цветом
Опции утилиты реализуют огромное количество различных трансформаций изображения – изменение размеров и координат, применение разнообразных фильтров, размытие, наложение тени и многое другое. На полное их описание не хватило бы всего журнала, поэтому лучше кратко опишем возможности остальных утилит.
Утилита mogrify во многом повторяет функциональность convert, но результаты преобразования она сохраняет в исходном файле. Кроме того, данная утилита позволяет работать с группой файлов по маске.
n Montage – позволяет комбинировать изображения, создавать композиции.
n Animate – как видно из названия, используется для анимации, позволяет работать с анимированными gif-файлами.
n Combine – комбинирует изображения (очень удобна для нанесения логотипов на картинки).
n Import – «снимает» изображение заданной области экрана.
n Composite – также позволяет создавать композиции нескольких изображений и изменять форму изображения.
n Identify – возвращает информацию о параметрах изображения.
Основная при ручной работе утилита display является «обвёрткой» для остальных функций преобразования графики, нам в данном случае бесполезна.
Использование модуля Imagick
Недостатки вызова утилит ImageMagick как внешних программ становятся очевидны, когда операции по манипуляциям с изображениями являются обычной функциональностью приложения. Банальный пример – публичная веб-галерея со средними возможностями. Как уже говорилось выше, класс для работы с пакетом присутствует (вернее, присутствовал) в репозитарии PEAR.
Относительно недавно на его основе был создан PECL-модуль imagick, доступный в настоящее время по адресу: http://pecl.php.net/package/imagick (присутствует и версия под Windows, в виде скомпилированной dll, скачать её можно здесь: http://snaps.php.net/win32/PECL_4_3). PECL – это репозитарий модулей PHP, не входящих в официальный дистрибутив. Большинство из них находятся в разработке, а самые успешные становятся штатными расширениями (из недавних это модуль SOAP).
Расширение устанавливается как обычный php-модуль, в папку ext/imagick (или, в зависимости от версии PHP, в extensions/imagick), затем в конфигурационном файле php.ini, в секции Dynamic Extensions, прописываются соответствующие строчки:
;для UNIX систем
extension= imagick.so
;для Windows
extension=msql.dll
После перезагрузки веб-сервера, функции imagick становятся доступны.
Предупреждение для программистов, решивших опробовать возможности пакета на операционной системе Windows, – скомпилированная dll будет работать только самой последней версией интерпретатора PHP.
Разумеется, модуль imagick не предоставит доступ ко всем возможностям ImageMagick (по уверению его создателя, пока), но наиболее распространенные действия с графикой в веб-программировании в нём уже реализованы.
К сожалению, на момент написания статьи официальная документация на модуль практически отсутствовала, поэтому я постараюсь осветить работу всех доступных в данное время функций.
Следует также заметить, что расширение в разработке и все его функции имеют статус экспериментальных, в частности это обозначает, что использовать их нужно осторожно (use this function at your own risk). Правда, в моей практике никаких опасных сбоев замечено не было. Работа с расширением происходит так:
$handle = imagick_create () or die («Could not create handle»)
imagick_read($handle,»myimg.gif»);
imagick_set_attribue($handle, array(«quality»=>10, «format»=>»jpeg»);
imagick_write($handle,»myimg.jpg»);
imagick_free($handle);
В первой строчке функцией imagick_create() мы получаем указатель на новый экземпляр imagick, который потом используем во всех дальнейших действиях. Затем с помощью imagick_read() считываем существующее изображение. Формат файла при этом определяется автоматически, если же этого не происходит, разработчики рекомендуют использовать префикс из названия формата, отделённый от имени файла двоеточием (например, GIF:mygif.gif). Данная функция позволяет задавать в качестве второго параметра и URL (например, http://my.server.com/picture.gif). Другой пример использования imagick_read():
$handle = image_new() or die («Could not connect»);
imagick_read($handle, array(«mypic.gif», «http://my.server.com/mypic.png»));
imagick_write($handle, «PNG:mypic.myext»);
imagick_free($handle);
В данном случае применяется image_new(), синоним и вероятная замена imagick_create ().
Функция imagick_set_attribue() изменяет атрибуты рисунка, получая в качестве второго параметра их массив. В настоящее время доступны следующие атрибуты:
Пояснять их значение, я думаю, нет необходимости. Получить атрибуты существующего изображения можно функцией imagick_set_attribute(), принимающей в качестве параметров указатель и имя атрибута. Сейчас доступны следующие значения:
Конечно, список не впечатляет, но всё, что здесь написано, касается версии модуля 0.1, а он активно разрабатывается.
Imagick_write() осуществляет запись результата в указанный файл локальной файловой системы, при этом формат файла определяется по заданному расширению. В случае нераспознавания формата рекомендации такие же, как и для функции imagick_read().
Наконец imagick_free(), как нетрудно догадаться из названия, освобождает указатель и все связанные с ним ресурсы.
Что осталось за рамками нашего небольшого примера? Прежде всего группа функций для преобразования изображений:
n imagick_copy_shear() – усекает изображение до заданных размеров;
n imagick_copy_ crop() – также усекает, но с возможностью задания начальных координат;
n imagick_copy_rotate() – поворачивает изображение вокруг своей оси на заданный угол;
n imagick_copy_sample() – масштабирует изображение.
Все эти функции возвращают указатель на новый ресурс, оставляя исходный (являющийся входным параметром) неизменным.
Функция imagick_copy_resize(), также возвращающая указатель на новый ресурс, позволяет задать размеры изображения, применить к нему фильтр, а также контрастность/размытие (в зависимости от знака входного параметра). На данный момент доступны следующие фильтры:
Источник: samag.ru
Обзор графического редактора ImageMagick для Ubuntu Linux
Ошибка в тексте? Выделите ее мышкой! И нажмите: CTRL+Enter, сообщите об этом, автор постарается в краткие сроки обновить / исправить материал.
ImageMagick, что это такое, и с чем его едят, у вас, наверное, это главный вопрос? Это многофункциональный кроссплатформенный редактор изображений только не графический, а консольный, редактор не простой, имеет большой набор консольных утилит, которые придают данному редактору множество разнообразных функций для работы с изображениями.
Конечно же, много манипуляций с изображениями, вы можете сделать с таких графических редакторов как GIMP и Photoshop, но ImageMagick в некотором функционале обходит редакторы выше, а именно в пакетном преобразовании фото, чем никакой Фотошоп и Гимп не может похвастаться.
На текущий момент ImageMagick имеет поддержку наверное всех известных графических форматов(более 200) включая PNG, JPEG, JPEG 2000, GIF, TIFF, DPX, EXR, WebP, PostScript, PDF, и SVG, проверить можно выполнив в терминале следующую команду:
convert -list format
После вы увидите полный список всех форматов которые поддерживаются данной утилитой, их очень много.
Наверное прежде всего в данном материале мы рассмотрим, что же может ImageMagick и каким функционалом обладает, а в последующих материалах мы уже будем рассматривать конкретные примеры по возможностям консольного аналога графического редактора фотошоп или же Gimp под названием imagemagick.
Возможности ImageMagick
- Анимация — вы можете создать GIF анимацию имея для этого заранее подготовленную группу изображений, которую, можно легко соединить в одно единое изображение, в итоге всего этого и получится анимация слайдов, между которыми будет установлен тайм-аут, который вы сможете задать сами.
- Управление цветами — вы сможете с помощью терминала работать с различными цветовыми профилями как RGB так и SRGB, возможность конвертирования фото с одного в другой и наоборот. Так же с помощью команд мы можем залить фон фото нужным на цветом, все это прописывается так же с помощью команд, в следующем материале, мы начнем рассматривать конкретные примеры.
- Обработка изображений — с помощью ImageMagick работая в консоли, вы так же имеете возможность обрабатывать фото придавая им различных эффектов, например(задав тень, сделать фото объемным придав виду фото как бы 3D, использование готовых шаблонов для добавления эффектов фото, объединение изображений с отдельных частей, поворот фото как влево так и вправо на нужное количество градусов).
- Работа с шириной, высотой, полное управление фото и возможность манипуляций с размерами в любой размер который вам нужен.
- Возможность смещения фото по геометрии задав нужные позиции, все доступно и легко прописывается используя терминал.
- Работа со стеком изображений.
- Преобразование фото в разнообразные форматы, об этом я уже ранее писал, все делается довольно легко.
- Сomposite, работа с наложением фото друг на друга, наложение имеет много плюсов с помощью которых мы можем создавать действительно эффектные фото и создавать что-то свое уникальное, конечно в фотошопе или Gimp, Вы это можете сделать простым перетягиванием фото с помощью мыши, но умение работы с консольным фотошопом, вам так же пригодится.
- Использование компонентов маркировки, Вы можете с помощью команд задать в терминале определенные координаты, просканировать фото и нарисовать рисунок, все не так просто как кажется, так как нужно точно просчитать координаты для рисования.
- Добавление границ и рамок к фото, а так же не просто рамок, но и возможность задания полного очертания фото. Представьте, у вас имеется красочное фото, Вы можете задать полное очертание фото по его границам и конвертировать его в черно белую окраску, после распечатать рисунок и имеем готовое занятие для ваших детей, для раскраски мультяшных героев, все это так же доступно с консольного фотошопа.
- Дискретное преобразование Фурье. Если кто-то не понимает, что за преобразования Фурье, и чем оно нам поможет, объясню вкратце это математическое преобразование позволяет обработать фото и улучшить следующие моменты (повышение яркости и контрастности, устранение размытости, добавление резкости и удаления шумов).
- Работа с пиксельным кешем.
- Draw — работа с разнообразными геометрическими фигурами и текстом, которые можно наложить на наше фото. Очень много чего предстоит описать, все это будет в дальнейших статьях.
- Работа с шифрование фото или с расшифровкой. Вы можете зашифровать ваши фото в некий бред который никто не сможет расшифровать без вашего участия и не имея вашего пароля который вы для этого использовали. Полезная штука если на компьютере работает несколько человек.
- Generalized pixel — работа с искажением пикселей.
- Гетерогенная обработка изображений. ImageMagick включает в себя поддержку гетерогенной обработки фото используя для этого фреймворк OpenCL, который позволяет использовать многопоточность, что ускоряет обработку в разы в сравнении с стандартной обработкой.
- Работа с динамическим диапазоном изображений HDRI. По умолчанию, пиксели изображений в ImageMagick хранятся как значения без знака в диапазоне от 0 до квантовой глубины, которая, как правило, 16-бит (Q16). При использовании HDRI, пиксели хранятся в представлении с плавающей точкой и могут включать в себя отрицательные значения, а также значения, которые превышают квантовую глубину. Большинство цифровых форматов изображений не поддерживает HDRI, для таких изображений любые пиксели вне диапазона квантовой глубины сжимаются, и после сохранения, фото получается с более высоким качеством, что соответственно лишь плюс например для фотографов и не только.
- Калькулятор изображений — используя оператор Fx в нашем математическом конвертировании, мы можем создавать совершенно новые изображения с давно забытых старых(добавить градиент, добавление новых цветов для каналов фото, возможность масштабирования или же поворота, совмещение, объединение пикселей)и это еще не все.
- Работа с градиентами, возможность наложения градиентов к фото, накладывая таким образом дополнительные эффекты которые лишь улучшают ваши фото.
- Добавление мета данных к фото, то есть полное описание к файлу(название, формат, размеры, цветовой профиль, глубина) и много другой дополнительной информации, дата создания и дата изменения или любого редактирования, все это можно добавить в метаданные к файлу.
- Возможность конвертирования фото под мобильную платформу IOS для мобильных устройств iPhone/IPad.
- ImageMagick поддерживает возможность работы с (мега, гига и тера) пиксельными размерами изображений. Ширина изображения или высота может варьироваться от 1 до 2 гига-пикселей для 32-битной ОС и до 9-EXA пикселей для 64-битной ОС.
- Монтаж фото используя утилиту montage, позволяет объединить целую группу фото с 5-10 и более и создать одно целостное, что-то на подобии ускоренной фотосессии задав автоматический таймер на несколько секунд и после, вы имеете все фото в одном флаконе, конечно не совмещенные в одно, а объединенные друг к другу, в итоге имеем одно длинное фото. Не всем этот функционал полезен, но думаю найдутся и такие.
- Морфология форм — Морфология первоначально была разработана в качестве метода, по которому структура форм в изображении может быть очищена или проверена путем сравнения каждого пикселя с соседним различными способами, что позволяет работать с каждым пикселем отдельно и задать тень либо же яркость как вам потребуется. Функционал довольно полезный, конечно название такое закрученное, что с первого раза и не догадаешься что это такое.
- Motion picture support — поддержка обработки формата изображений DPX (SMPTE 268M-2003), который ранее был разработан компанией Kodak Cineon для хранения одного кинокадра или потока видеоданных.
- Работа с шумами, цветами и улучшением качества фото(резкость/размытость), обработка фильтрами итд.
- Добавление к фото текста и комментариев которые можно стильно оформить и придать изображению тех параметров которые были задуманы.
- Работа с прозрачностью в фото, наверно один из очень важных элементов без которого графический редактор трудно таковым назвать, но как видите и консольный фотошоп ImageMagick, аналогично обладает этим функционалом.
В списке выше, я попытался охватить большую часть возможностей консольной утилиты ImageMagick, это конечно не все возможности, но большинство, многое будет рассматриваться по ходу в дальнейших детальных обзорах где каждой отдельной утилите входящей в этот консольный редактор изображений мы рассмотрим по очереди.
Предстоит многое описать и попробовать разнообразные эффекты и возможности, возможно не все осилят так как не захотят работать в консоли понимая, что все это можно попробовать в других графических редакторах, по своему вы конечно будете правы, выбор огромен и каждый вправе выбрать, то что ему удобней.
На этом пожалуй материал окончен, если быть точнее, первая часть материала с запланированного цикла статей по консольному фотошопу — ImageMagick. Всем удачи!
Источник: linuxsoid.ru
ImageMagick-6.2.0-7
ImageMagick это набор средств и библиотек для чтения, записи и манипулирования изображениями в различных форматах. Операции обработки изображения доступны из командной строки. Так же доступны обвязки к различным языкам программирования.
Информация о пакете
- Адрес (HTTP): http://www.imagemagick.org/download/ImageMagick-6.2.0-7.tar.bz2
- Адрес (FTP): ftp://ftp.imagemagick.net/pub/ImageMagick/ImageMagick-6.2.0-7.tar.bz2
- Контрольная сумма: 182c5285e6e241439a7fbdfd2a4471b1
- Размер: 4.5 MB
- Требуемое дисковое пространство: 109 MB
- Расчетное время сборки: 2.76 SBU
Зависимости ImageMagick
Рекомендованные
Опционально (установка, основанная на поддержке требуемого формата и средств)
Установка ImageMagick
Установим Imagemagick запуском следующих команд:
sed -i -e ‘s/$(LIBLTDL) $/$/’ Makefile.in ./configure —prefix=/usr —with-modules make
А теперь, как пользователь root:
make install
Дополнительные опции конфигурации
Существуют дополнительные ключи, которые могут быть помещены для ImageMagick для настройки установки по вашим требованиям. Просмотрите инструкции по установке ImageMagick на http://www.imagemagick.org/www/Install-unix.html .
Объяснение команд
sed -i -e ‘s/$(LIBLTDL) $/$/’ Makefile.in : Пакет будет собирать и устанавливать другую версию библиотеки Libtool в /usr/lib. Эта команда заставит пакет компоноваться с установленной версией libltdl и не заменит ее.
—with-modules: Включает поддержку для динамически загружаемых модулей.
Установленные программы: animate, compare, composite, conjure, convert, display, identify, import, Magick-config, Magick++-config, mogrify, montage и Wand-config
Установленные библиотеки: libMagick.[so,a], libMagick++.[so,a], libWand.[so,a], Perl модуль PerlMagick.so и большое количество модулей плагинов
Установленные директории: /usr/include/magick, /usr/include/wand, /usr/lib/ImageMagick-6.2.0, /usr/lib/perl5/site_perl/5.8.5/i686-linux/auto/Image/Magick, /usr/share/ImageMagick-6.2.0
Короткое описание
animate
анимирует последовательность изображений.
compare
сравнивает изображение с восстановленным изображением.
composite
смешивает несколько изображений в одно имеющееся.
conjure
обрабатывает MSL скрипт для создания изображения.
convert
конвертирует изображение между разными форматами.
display
identify
описывает формат и характеристики файла изображения.
import
захватывает окно X.
Magick-config и Magick++-config
показывает информацию об установленной версии ImageMagick и Magick++.
mogrify
montage
смешивает несколько изображений в одно новое.
Wand-config
показывает опции, необходимые для использования библиотеки Wand.
позволяет читать, манипулировать и записывать большое количество графических форматов файлов, используя библиотеку ImageMagick . Запустите make в директории PerlMagick/demo дерева исходников пакета для просмотра демонстрации возможностей модуля.
Последнее обновление 2005-03-17 09:13:20 -0700
Источник: www.opennet.ru