Используем ImageMagick в веб-разработке::Журнал СА 6.2005
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6124
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6832
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4117
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2969
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3774
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3782
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6271
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3126
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3426
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7241
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10609
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12330
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13962
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9093
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7047
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5355
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4585
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3396
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3122
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3376
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 2996
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Используем ImageMagick в веб-разработке

Архив номеров / 2005 / Выпуск №6 (31) / Используем ImageMagick в веб-разработке

Рубрика: Веб /  Веб

Кирилл Сухов

Используем ImageMagick в веб-разработке

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

Для подобных действий также широко применяется библиотека GD, имеющая в арсенале своей второй версии , довольно внушительный список функций.

Работать с GD можно посредством PHP, Perl, Tcl и некоторых других языков. Она имеет широкие возможности, но качество результирующих изображений часто оставляет желать лучшего. Кроме того, такие действия, как изменение пропорций, «обрезка» изображения, манипуляции с цветами, вставка другого рисунка, хоть и возможны, но крайне неудобны. Здесь на помощь приходит пакет ImageMagick (http://imagemagick.org), представляющий прекрасное средство для обработки изображений. Работа с ним возможна посредством интерфейсов для различных языков программирования (Perl, Python, PHP, C). Сегодня мы рассмотрим способы и приёмы работы с графикой PHP с использованием пакета ImageMagick.

Что представляет собой ImageMagick?

Коротко поясню, чем является этот пакет и какие задачи можно решить с его помощью. Вообще говоря, я использую не совсем детерминированный термин «пакет», хотя данный продукт называют обычно библиотекой и даже утилитой. На самом деле это согласованный (что немаловажно) набор утилит для работы с графикой, причём в полном соответствии с идеологией каждая из них выполняет свою задачу. Конечно, возможности ImageMagick не могут сравниться с потенциалом графического процессора, но для наших задач это и не нужно. Если вы пользователь *nix-операционной системы, то ImageMagick у вас, скорее всего, уже установлен или по крайней мере присутствует в дистрибутиве. В противном случае забираем его по адресу http://www.imagemagick.org/script/download.php (присутствуют также версии для Windows и MacOS).

Способы применения

Для PHP-разработчика есть два основных пути работы с изображениями с помощью ImageMagic: выполнять команды пакета, пользуясь функцией exec() (или system()), или использовать класс imagick из репозитария PEAR. Большинство программистов применяют именно первый подход. Причины этого очевидны – любая работа с графикой означает довольно существенное потребление ресурсов веб-сервера, а дополнительный интерфейс, как бы хорошо он ни был написан, эту нагрузку отнюдь не уменьшает. Правда, в последнее время появился повод пересмотреть эту точку зрения, но об этом чуть позже. Кроме того, прямой вызов команд пакета даёт доступ ко всем его возможностям.

Конечно, у данного метода есть и недостатки. У скриптов, вернее, у пользователя, от имени которого они запускаются, должны быть соответствующие права, но проблемы безопасной и эффективной работы веб-сервера мы в данный момент не обсуждаем. Основные возможности пакета будем рассматривать, предполагая, что его команды запускаются именно таким образом.

Возможности пакета

Наверное, самая часто используемая утилита 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. Исходное фото

Рисунок 1. Исходное фото

Картинка (в формате jpg) занимает 124 Kb. После вышеприведённого преобразования получаем рисунок в формате gif (рис. 2), «весящий» уже 37 Kb.

Рисунок 2. Уменьшаем «вес» фотографии

Рисунок 2. Уменьшаем «вес» фотографии

Конечно, потеря качества есть, но любой человек, работавший до этого с GD, признает результат замечательным. Воспользуемся какой-нибудь ещё возможностью convert, например, изменим цвета оригинала:

exect("convert ". $primary." -coloreze 0, 0, 50 ". test2.gif);

результат на рис. 3.

Рисунок 3. Экспериментируем с цветом

Рисунок 3. Экспериментируем с цветом

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

Утилита mogrify во многом повторяет функциональность convert, но результаты преобразования она сохраняет в исходном файле. Кроме того, данная утилита позволяет работать с группой файлов по маске.

  • Montage – позволяет комбинировать изображения, создавать композиции.
  • Animate – как видно из названия, используется для анимации, позволяет работать с анимированными gif-файлами.
  • Combine – комбинирует изображения (очень удобна для нанесения логотипов на картинки).
  • Import – «снимает» изображение заданной области экрана.
  • Composite – также позволяет создавать композиции нескольких изображений и изменять форму изображения.
  • Identify – возвращает информацию о параметрах изображения.

Утилита conjure стоит несколько особняком, она представляет собой командный процессор для встроенного скриптового языка Magick Scripting Language (MSL).

Основная при ручной работе утилита display является «обвёрткой» для остальных функций преобразования графики, нам в данном случае бесполезна.

Более подробную информацию по использованию утилит пакета можно увидеть на официальном веб-сайте ImageMagic (http://www.imagemagick.net/script/command-line-tools.php) или в документации, идущей вместе с дистрибутивом.

Использование модуля 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). Правда, в моей практике никаких опасных сбоев замечено не было. Работа с расширением происходит так:

<?php

$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():

<?php

$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() изменяет атрибуты рисунка, получая в качестве второго параметра их массив. В настоящее время доступны следующие атрибуты:

  • adjoin
  • delay
  • format

Пояснять их значение, я думаю, нет необходимости. Получить атрибуты существующего изображения можно функцией imagick_set_attribute(), принимающей в качестве параметров указатель и имя атрибута. Сейчас доступны следующие значения:

  • format
  • magick
  • quality

Конечно, список не впечатляет, но всё, что здесь написано, касается версии модуля 0.1, а он активно разрабатывается.

Imagick_write() осуществляет запись результата в указанный файл локальной файловой системы, при этом формат файла определяется по заданному расширению. В случае нераспознавания формата рекомендации такие же, как и для функции imagick_read().

Наконец imagick_free(), как нетрудно догадаться из названия, освобождает указатель и все связанные с ним ресурсы.

Что осталось за рамками нашего небольшого примера? Прежде всего группа функций для преобразования изображений:

  • imagick_copy_shear() – усекает изображение до заданных размеров;
  • imagick_copy_ crop() – также усекает, но с возможностью задания начальных координат;
  • imagick_copy_rotate() – поворачивает изображение вокруг своей оси на заданный угол;
  • imagick_copy_sample() – масштабирует изображение.

Все эти функции возвращают указатель на новый ресурс, оставляя исходный (являющийся входным параметром) неизменным.

Функция imagick_copy_resize(), также возвращающая указатель на новый ресурс, позволяет задать размеры изображения, применить к нему фильтр, а также контрастность/размытие (в зависимости от знака входного параметра). На данный момент доступны следующие фильтры:

IMAGICK_FILTER_UNDEFINED

IMAGICK_FILTER_POINT

IMAGICK_FILTER_BOX

IMAGICK_FILTER_TRIANGLE

IMAGICK_FILTER_HERMITE

IMAGICK_FILTER_HANNING

IMAGICK_FILTER_HAMMING

IMAGICK_FILTER_BLACKMAN

IMAGICK_FILTER_GAUSSIAN

IMAGICK_FILTER_QUADRATIC

IMAGICK_FILTER_CUBIC

IMAGICK_FILTER_CATROM

IMAGICK_FILTER_MITCHELL

IMAGICK_FILTER_LANCZOS

IMAGICK_FILTER_BESSEL

IMAGICK_FILTER_SINC

Imagick_convert() преобразует один файл в другой или (когда конечный файл не указан) выводит его в браузер. Её упрощённый вариант imagick_dump(), выводит картинку на экран.

Imagick_annotate() добавляет к изображению текст, принимая в качестве второго параметра массив его атрибутов. Пример работы этой функции:

imagick_annotate($handle,array(

"primitive"=>"text 150,150

hello world",

"pointsize"=>60,

"antialias"=>1,

"stroke"=>’green’,

"fill»=>’#ff7755’,

"font»=>"Arial.ttf",

"rotate"=>90

));

Imagick_list-magickinfo() выводит список доступных файловых форматов (в настоящие время таковых более 130, правда, некоторые из них доступны только для чтения).

В заключение хочу заметить, что лидер проекта Imagick, Christian Stocker, в предварительной документации к модулю сетует на нехватку у него свободного времени на доработку и приглашает желающих в ней поучаствовать. Как он утверждает:  «It’s really not very hard». Приветствуются также пожелания о том, какие функции следует реализовать в первую очередь. Так что, коллеги, всё в наших руках.

Ссылки:

  1. Адрес проекта – http://pecl.php.net/package/imagick.
  2. Examples of ImageMagick Usage – http://www.cit.gu.edu.au/~anthony/graphics/imagick6.
  3. Graphics from the command line – http://www-106.ibm.com/developerworks/library/l-graf/?ca=dnt-428.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru