Фреймворк CodeIgniter Version 2.1.3


Класс манипуляций с изображениями

Класс Image Manipulation позволяет вам выполнять следующие действия:

Поддерживаются все три основных библиотеки: GD/GD2, NetPBM и ImageMagick

Примечание: Наложение ватермарков доступно только при использовании библиотеки GD/GD2. К тому же, даже если поддерживаются другие библиотеки, GD требуется для определения свойств изображения. Однако, обработка изображения будет осуществляться с той библиотекой, которую вы укажете.

Инициализация класса

Как и большинство других классов CodeIgniter, класс для работы с изображениями инициализируется в вашем контроллере посредством функции $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 на 50 пикселей, используя GD2 image_library. Так как включена опция maintain_ratio, пропорции миниатюры будет как можно ближе к оригинальной ширине и высоте. Миниатюра будет называться 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 Нет Нет Устанавливает серверный путь к вашей библиотеке NetPBM или ImageMagick. Если вы используете какую-либо из них, или обе, укажите путь к ним. 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 Указывает угол вращения. Помните, что PHP вращает против часовой стрелки, поэтому, к примеру, вращение на 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_thumb.jpg).

Все параметры, перечисленные в таблице выше, доступны для этой функции, за исключением трех: rotation_angle, x_axis и y_axis.

Создание миниатюры

Функция масштабирования создает файл миниатюры (и сохраняет оригинал), если вы установите парамер в TRUE:

$config['create_thumb'] = TRUE;

Этот единственный параметр определяет, создавать миниатюру или нет.

Создание копии

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

$config['new_image'] = '/path/to/new_image.jpg';

Замечания насчет этого параметра:

Масштабирование оригинального изображения

Если не использован ни один из параметров, указанных выше (create_thumb и new_image), функция масштабирования будет обрабатывать оригинальное изображение.

$this->image_lib->crop()

Функция обрезки работает почти идентично функции масштабирования, за исключением того, что она требует указания осей X и Y в пикселях, уточняющих где нужно обрезать:

$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.

Два типа ватермарков

Есть два типа ватермарков, которые вы можете использовать:

Наложение ватермарка

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

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

Пример выше использует 16-пиксельный шрифт True Type, чтобы создать текст "Copyright 2006 - John Doe". Ватермарк будет размещен внизу по центру изображения, в 20 пикселях от нижней границы изображения.

Примечание: Чтобы класс изображений смог обрабатывать что-либо, файл изображения должен иметь разрешения на запись.

Параметры наложения ватермарков

Эта таблица показывает парамеры, которые доступны для обоих типов наложения ватермарков (текст и изображение)

Параметр Значение по умолчанию Опции Описание
wm_type text text, overlay Устанавливает тип ватермарка (текст или накладываемое изображение).
source_image Нет Нет Указывает путь к исходному изображению. Путь может быть абсолютным или относительным серверным путем, но не URL.
dynamic_output FALSE TRUE/FALSE (boolean) Определяет, следует ли сохранять изображение на диск или только сгенерировать динамечески.
quality 90% 1 - 100% Устанавливает качество изображения. Большее качество провоцирует больший размер файлов.
padding Нет Число Отступ от края изображения, в пикселях.
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 Нет Нет Цвет тени, указанный в шестнадцатеричном значении. Если вы оставите это поле пустым, тени не будет. Обратите внимание, необходимо использовать все шесть цифр (например 993300).
wm_shadow_distance 3 Нет Дистанция в пикселях от шрифта, на которую должна отдаляться тень.

Параметры накладываемого изображения

В этой таблице показаны параметры, которые доступны для ватермаркинга наложением изображения.

Параметр Значение по умолчанию Опции Описание
wm_overlay_path Нет Нет Серверный путь к изображению, которое следует использовать в качестве ватермарка. Требуется только при использовании этого метода.
wm_opacity 50 1 - 100 Прозрачность изображения. Вы можете указать прозрачность вашего изображения, используемого в качестве ватермарка. Это ослабит водяной знак, и он будет меньше скрывать детали под ним. Обычно устанавливают прозрачность в 50%.
wm_x_transp 4 Число Если изображение ватермарка в формате PNG или GIF, вы можете уточнить цвет «прозрачности». Эта настрока (вместе со следующей) позволит вам указывать цвет. Это работает с указанием координат X и Y пикселя (отсчитывая слева сверху), откуда будет взят цвет.
wm_y_transp 4 Число Вторая часть предыдущей настройки, позиция Y пикселя.
    Поддержать сайт на родительском проекте КГБ