Класс Image Manipulation (работа с изображениями)
Класс Image Manipulation позволяет осуществлять следующие действия:
- Изменение размера изображения
- Создание миниатюры
- Обрезка изображения
- Вращение изображения
- Добавление ватермарка
Поддерживаются все четыре основных библиотеки: GD/GD2, NetPBM, and ImageMagick
Примечание: Добавление ватермарка доступно только с библиотекой GD/GD2. К тому же, даже если другие библиотеки доступны, GD требуется для вычисления размеров изображений. Обработка изображения также может выполняться с указанной вами библиотекой.
Инициализация класса
Как и большинство других классов в CodeIgniter, класс Image инициализируется в вашем контроллере с помощью функции $this->load->library:
$this->load->library('image_lib');
Загруженный объект класса доступен как: $this->image_lib
Обработка изображения
Независимо от типа действия (масштабирование, обрезка, вращение или нанесение ватермарка), общий процесс идентичен. Вы можете установить некоторые параметры, соответствующие действию, а затем вызвать одну из доступных функций обработки. Например, чтобы создать миниатюру, сделайте так:
$config['image_library'] = 'gd2';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 75;
$config['height'] = 50;
$this->load->library('image_lib', $config);
$this->image_lib->resize();
Вышеприведенный код говорит функции image_resize искать изображение с именем mypic.jpg, находящееся в директории source_image, затем создать миниатюру размером 75 X 50 пикселей, используя GD2. Поскольку включена опция maintain_ratio, размер миниатюры будет приближен к указанным ширине width и высоте height настолько, насколько это возможно без изменения оригинального соотношения сторон. Миниатюра будет названа mypic_thumb.jpg
Примечание:Директория должна иметь права, разрешающие запись.
Примечание: Обработка изображения может требовать значительного количества серверной памяти для некоторых операций. Если вы получаете сообщения об ошибках памяти в процессе обработки изображений, возможно, следует уменьшить максимально допустимые размеры обрабатываемых изображений, и/или увеличить максимально доступный размер памяти в конфигурации PHP.
Функции обработки
Есть четыре доступных функции обработки:
- $this->image_lib->resize()
- $this->image_lib->crop()
- $this->image_lib->rotate()
- $this->image_lib->watermark()
- $this->image_lib->clear()
Эти функции возвращают булево TRUE в случае успеха, и булево FALSE при неудаче. В случае неудачи вы можете получить сообщение об ошибке от этой функции:
echo $this->image_lib->display_errors();
Хорошей практикой является использование функций обработки в условии, и вывод сообщений об ошибках, например так:
if ( ! $this->image_lib->resize())
{
echo $this->image_lib->display_errors();
}
Примечание: Опционально вы можете указать форматирование HTML для ошибок:
$this->image_lib->display_errors('<p>', '</p>');
Параметры
Параметры, описанные ниже, позволяют вам адаптировать обработку сообщения под свои нужды.
Обратите внимание, что не все параметры доступны для каждой функции. Например, оси x/y имеют значение только для обрезки. Также ширина и высота не будут иметь эффекта при обрезке. "Доступность" в колонке указывает, для какой функции актуален параметр.
Легенда:
- R — Изменение размера
- C — Обрезка
- X — Вращение
- W — Наложение ватермарка
Параметр | Значение по умолчанию | Опции | Описание | Доступность |
---|---|---|---|---|
image_library | GD2 | GD, GD2, ImageMagick, NetPBM | Указывает библиотеку, которая будет использована. | R, C, X, W |
library_path | — | — | Устанавливает серверный путь к ImageMagick или NetPBM. Если вы используете эти библиотеки, вы должны указать путь. | R, C, X |
source_image | — | — | Устанавливает имя и путь к оригинальному изображению. Путь должен быть относительным на сервере, но не URL. | R, C, S, W |
dynamic_output | FALSE | TRUE/FALSE (boolean) | Определяет, должно ли новое изображение записываться на диск, или генерироваться динамически. Примечание: если вы выбрали "динамически", только одно изображение может быть показано в момент времени, и оно не может быть размещено на странице. Оно просто будет отправлено в браузер, вместе с заголовками изображения. | R, C, X, W |
quality | 90% | 1 — 100% | Устанавливает качество изображения. Чем выше качество, тем больше размер файла. | R, C, X, W |
new_image | — | — | Указывает назначение — путь и имя файла назначения. Вы будете использовать это для создания копии. Путь должен быть относительным, или абсолютным на сервере, но не URL. | R, C, X, W |
width | — | — | Устанавливает ширину изображения. | R, C |
height | — | — | Устанавливает высоту изображения. | R, C |
create_thumb | FALSE | TRUE/FALSE (boolean) | Указывает функции обработки изображения на необходимость создания миниатюры. | R |
thumb_marker | _thumb | — | Указывает индикатор миниатюры. Будет вставлено перед расширением файла, к примеру из mypic.jpg получится mypic_thumb.jpg | R |
maintain_ratio | TRUE | TRUE/FALSE (boolean) | Указывает, сохранять-ли оригинальные пропорции при масштабировании. | R, C |
master_dim | auto | auto, width, height | Указывает использование главной оси при масштабировании или создании миниатюры. Например, предположим, что вы хотите изменить размер изображения до 100х75 пикселей. Если размер исходного изображения не позволяет выполнить качественное изменение размеров до указанных измерений, эта настройка определяет, по какой оси использовать приоритетное значение. "Auto" устанавливает ось автоматически, основываясь на ориентации изображения. | R |
rotation_angle | — | 90, 180, 270, vrt, hor | Указывает угол вращения изображения против часовой стрелки. Например, для вращения на 90 градусов направо следует указать значение 270. | X |
x_axis | — | — | Устанавливает координату X для обрезки, в пикселях. Например, если указано 30 — изображение будет обрезано на 30 пикселей слева. | C |
y_axis | — | — | Устанавливает координату Y для обрезки, в пикселях. Например, если указано 30 — изображение будет обрезано на 30 пикселей сверху. | C |
Установка параметров в конфигурационном файле
Если вы предпочитаете не устанавливать параметры так, как показано выше, вы можете просто поместить их в файл конфигурации. Просто создайте новый файл с именем image_lib.php, и поместите в него массив $config. Потом сохраните файл в config/image_lib.php и он будет использован автоматически. Вы НЕ должны использовать функцию $this->image_lib->initialize в том случае, если настройки сохранены в конфигурационном файле.
$this->image_lib->resize()
Функция изменения размера изображения (масштабирование) позволяет вам изменить размер оригинального изображения, создать копию (с масштабированием или без него) или миниатюру.
Для практических целей нет различий между созданием копии и созданием миниатюры, за исключением того, что имя файла миниатюры маркируется (то есть mypic.jpg становится mypic_thumb.jpg).
Все параметры, указанные в таблице вверху доступны для этой функции, кроме следующих: rotation_angle, x_axis, and y_axis.
Создание миниатюры
Функция изменения размера изображения создаст файл с миниатюрой The resizing function will create a thumbnail file (и сохранит оригинал), если вы установите параметр в TRUE:
$config['create_thumb'] = TRUE;
Этот единственный параметр определяет, создавать ли миниатюру или нет.
Создание копии
Функция изменения изображения создаст копию изображения (и сохранит оригинал), если вы укажете путь и/или новое имя файла, используя этот параметр:
$config['new_image'] = '/path/to/new_image.jpg';
Замечания по поводу этого параметра:
- Если задано только имя файла, он будет помещен в ту же директорию, где находится оригинал
- Если указан только путь, новое изображение будет размещено по указанному пути, с тем же именем, что и оригинальное.
- Если указан и путь, и имя изображения, оно будет размещено по указанному назначению и с указанным именем.
Изменение размера оригинального изображения
Если не указан ни один из двух параметров create_thumb и new_image, будет изменен размер оригинального изображения.
$this->image_lib->crop()
Функция обрезки работает почти идентично функции масштабирования, за исключением того, что требуется указать оси:
$config['x_axis'] = '100';
$config['y_axis'] = '40';
Доступны все настройки, перечисленные в таблице, кроме: rotation_angle, width, height, create_thumb, new_image.
Вот пример того, как вы можете обрезать изображение:
$config['image_library'] = 'imagemagick';
$config['library_path'] = '/usr/X11R6/bin/';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['x_axis'] = '100';
$config['y_axis'] = '60';
$this->image_lib->initialize($config);
if ( ! $this->image_lib->crop())
{
echo $this->image_lib->display_errors();
}
Примечание: трудно обрезать изображения без визуального интерфейса. Эта функция не очень полезна, если вы не создали для нее удобный интерфейс. Именно поэтому мы использовали модуль галереи в ExpressionEngine, CMS, которую мы разрабатываем. Мы добавили JavaScript UI, который позволяет выбирать область для обрезки.
$this->image_lib->rotate()
Функция вращения изображения требует, чтобы был указан угол вращения:
$config['rotation_angle'] = '90';
Есть пять опций для вращения:
- 90 — поворачивает против часовой стрелки на 90 градусов.
- 180 — поворачивает против часовой стрелки на 180 градусов.
- 270 — поворачивает против часовой стрелки на 270 градусов.
- hor — отражает изображение горизонтально.
- vrt — отражает изображение вертикально.
Вот пример, как вы можете вращать изображения:
$config['image_library'] = 'netpbm';
$config['library_path'] = '/usr/bin/';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['rotation_angle'] = 'hor';
$this->image_lib->initialize($config);
if ( ! $this->image_lib->rotate())
{
echo $this->image_lib->display_errors();
}
$this->image_lib->clear()
Функция очистки сбросит все значения параметров, использованных при обработке изображения. Это может быть востребованно, если обработка происходит в цикле.
$this->image_lib->clear();
Наложение ватермарка
Функция наложения ватермарка требует библиотеку GD/GD2.
Прим. пер.: для работы с ImageMagick, которая даст, безусловно, более высокое качество изображения и большую производительность, достаточно написать инструкцию в 1 строку. К тому же, возможности ImageMagick практически безграничны. Подробности гуглятся.Два типа наложения ватермарка
Есть два способа наложения ватермарка:
- Текст: Будет наложено сообщение, либо шрифтом True Type, который вы укажете, либо используя родной вывод текста, поддерживаемый библиотекой GD. Если вы используете версию True Type, ваша GD должна быть инсталлирована с поддежкой True Type (так в большинстве случаев, но не всегда).
- Наложение: Сверху накладывается изображение (обычно прозрачный PNG или GIF).
Наложение изображения
Также, как и с другими функциями, процесс наложения ватермарка включает в себя указание параметров и вызов функции. Вот пример:
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['wm_text'] = 'Copyright 2006 — John Doe';
$config['wm_type'] = 'text';
$config['wm_font_path'] = './system/fonts/texb.ttf';
$config['wm_font_size'] = '16';
$config['wm_font_color'] = 'ffffff';
$config['wm_vrt_alignment'] = 'bottom';
$config['wm_hor_alignment'] = 'center';
$config['wm_padding'] = '20';
$this->image_lib->initialize($config);
$this->image_lib->watermark();
Этот пример использует шрифт True Type, размером в 16 пикселей для того, чтобы создать текст "Copyright 2006 — John Doe". Ватермарк будет находиться посередине изображения, на 20 пикселей от низа.
Примечание: файл должен иметь разрешения на запись. Например, 777.
Прим. пер.: Опасно! Безопасно — отслеживать file owner при установке скрипта и использовать права 644.Параметры для наложения ватермарка
В этой таблице отражены параметры, которые доступны для обоих способов наложения ватермарка (текст или наложение изображения)
Параметр | Значение по умолчанию | Опции | Описание |
---|---|---|---|
wm_type | text | text, overlay | Устанавливает способ наложения ватермарка (текст или наложение изображения). |
source_image | — | — | Указывает на имя и путь к исходному изображению. Возможны абсолютный или относительный пути на сервере, но не URL. |
dynamic_output | FALSE | TRUE/FALSE (boolean) | Определяет, должно ли новое изображение записываться на диск, или генерироваться динамически. Примечание: во втором случае изображение будет отправлено непосредственно в браузер, с заголовками изображения. |
quality | 90% | 1 — 100% | Определяет качество изображения. Выше качество — больше размер файла. |
padding | — | A number | Значение отступа от границы изображения, в пикселях. |
wm_vrt_alignment | bottom | top, middle, bottom | Устанавливает вертикальное выравнивание — вверху, посередине или внизу. |
wm_hor_alignment | center | left, center, right | Устанавливает горизонтальное выравнивание — слева, по центру или справа. |
wm_hor_offset | — | — | Вы можете указать горизонтальное смещение (в пикселях) для позиции ватермарка. Имеется в виду смещение направо, за исключением случая, если вы указали выравнивание "right" — в этом случае ватермарк смещается влево. |
wm_vrt_offset | — | — | Вы можете указать вертикальное смещение (в пикселях) для позиции ватермарка. Имеется в виду смещение вниз, за исключением случая, если вы указали выравнивание "bottom" — в этом случае ватермарк смещается вверх. |
Параметры текста
В этой таблице показаны параметры, которые применимы к текстовому типу ватермарка.
Параметр | Значение по умолчанию | Опции | Описание |
---|---|---|---|
wm_text | — | — | Текст для ватермарка. Обычно уведомление копирайта. |
wm_font_path | — | — | Серверный путь к шрифту True Type. Если вы не используете эту опцию, будет использован родной шрифт GD. |
wm_font_size | 16 | — | Размер шрифта. Примечание: Если вы не используете опцию True Type выше, номер должен быть в диапазоне 1 — 5. |
wm_font_color | ffffff | — | Цвет шрифта в шестнадцатеричной нотации.. Обратите внимание, вы должны использовать только шестизначные значения (например, 993300). |
wm_shadow_color | — | — | Цвет тени, в шестнадцатеричной нотации. Если вы оставите этот параметр пустым, тень не будет использована. Обратите внимание, вы должны использовать только шестизначные значения (например, C0C0C0). |
wm_shadow_distance | 3 | — | Расстояние (в пикселях) от надписи до ее тени. |
Параметры накладываемого изображения
В этой таблице показаны параметры для накладываемого изображения ватермарка.
Параметр | Значение по умолчанию | Опции | Описание |
---|---|---|---|
wm_overlay_path | — | — | Серверный путь к изображению, которое будет использовано в качестве ватермарка. Требуется указывать только для этого типа ватермарка (наложение изображения). |
wm_opacity | 50 | 1 — 100 | Прозрачность. Вы можете указать прозрачность ватермарка. Это позволяет использовать непрозрачное изображения для ватермарка, при этом не будут сильно скрываться детали оригинального изображения под ним. Типичное значение — 50%. Прим. пер.: до безобразия ресурсоемко. Используйте ватермарк в PNG, и устанавливайте необходимую прозрачность заранее. |
wm_x_transp | 4 | A number | Если ваш ватермарк — это изображение в формате PNG или GIF, вы можете указать цвет, который должен быть "прозрачным". Эта установка (вместе со следующей) позволяют указать этот цвет. Это работает с указанием "X" and "Y" координат пикселя (считается сверху слева) на изображении, что соответствует пикселю, цвет которого должен стать прозрачным. |
wm_y_transp | 4 | A number | Вместе с предыдущей настройкой, это определяет координату символа, цвет которого станет прозрачным для всего изображения. |