CodeIgniter User Guide Version 2.0.0


Класс 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.

Функции обработки

Есть четыре доступных функции обработки:

Эти функции возвращают булево 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 имеют значение только для обрезки. Также ширина и высота не будут иметь эффекта при обрезке. "Доступность" в колонке указывает, для какой функции актуален параметр.

Легенда:

Параметр Значение по умолчанию Опции Описание Доступность
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';

Есть пять опций для вращения:

  1. 90 — поворачивает против часовой стрелки на 90 градусов.
  2. 180 — поворачивает против часовой стрелки на 180 градусов.
  3. 270 — поворачивает против часовой стрелки на 270 градусов.
  4. hor — отражает изображение горизонтально.
  5. 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 практически безграничны. Подробности гуглятся.

Два типа наложения ватермарка

Есть два способа наложения ватермарка:

Наложение изображения

Также, как и с другими функциями, процесс наложения ватермарка включает в себя указание параметров и вызов функции. Вот пример:

$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 Вместе с предыдущей настройкой, это определяет координату символа, цвет которого станет прозрачным для всего изображения.