Spec-Zone.ru › CodeIgniter 3

Класс обработки изображений

Класс обработки изображений CodeIgniter позволяет выполнять следующие действия:

  • Изменение размера изображения
  • Создание миниатюр
  • Обрезка изображения
  • Поворот изображения
  • Наложение водяного знака на изображение

Поддерживаются все три основные библиотеки обработки изображений: 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 x 50 пикселей с использованием библиотеки изображений GD2. Поскольку параметр maintain_ratio включён, миниатюра будет как можно ближе к целевым ширине и высоте, сохраняя при этом исходное соотношение сторон. Миниатюра будет называться mypic_thumb.jpg и будет расположена на том же уровне, что и source_image.

Примечание

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

Примечание

Обработка изображений может потребовать значительного объёма оперативной памяти сервера для некоторых операций. Если у вас возникают ошибки недостатка памяти при обработке изображений, вам может потребоваться ограничить их максимальный размер и/или настроить пределы памяти PHP.

Методы обработки

Доступны четыре метода обработки:

  • $this->image_lib->resize()
  • $this->image_lib->crop()
  • $this->image_lib->rotate()
  • $this->image_lib->watermark()

Эти методы возвращают булево значение 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, W
source_image Нет Нет Устанавливает имя/путь исходного изображения. Путь должен быть относительным или абсолютным путём на сервере, а не URL.
dynamic_output FALSE TRUE/FALSE (булево) Определяет, следует ли записывать новый файл изображения на диск или генерировать его динамически. Примечание: если вы выберете динамический режим, можно отобразить только одно изображение за раз, и его нельзя позиционировать на странице. Он просто динамически выводит исходное изображение в браузер вместе с заголовками изображения. R, C, X, W
file_permissions 0644 (целое число) Права доступа к файловой системе для применения к результирующему файлу изображения, записывая его на диск. ВНИМАНИЕ: Используйте восьмеричное целочисленное представление! 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 (булево) Указывает функции обработки изображений на создание миниатюры. R
thumb_marker _thumb Нет Указывает маркер миниатюры. Он будет вставлен непосредственно перед расширением файла, поэтому mypic.jpg станет mypic_thumb.jpg R
maintain_ratio TRUE TRUE/FALSE (булево) Указывает, следует ли сохранять исходное соотношение сторон при изменении размера или использовать жёсткие значения. R, C
master_dim auto auto, width, height Указывает, что использовать в качестве основной оси при изменении размера или создании миниатюр. Например, предположим, что вы хотите изменить размер изображения на 100 x 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() если вы сохраните свои параметры в файле конфигурации.

Наложение водяного знака на изображение

Функция наложения водяного знака требует библиотеки GD/GD2.

Два типа водяных знаков

Существует два типа водяных знаков, которые вы можете использовать:

  • Текст: сообщение водяного знака будет сгенерировано с помощью текста, либо с помощью шрифта True Type, который вы указываете, либо с помощью родной функции вывода текста, поддерживаемой библиотекой GD. Если вы используете версию True Type, ваша установка GD должна быть скомпилирована с поддержкой True Type (у большинства так, но не у всех).
  • Наложение: сообщение водяного знака будет сгенерировано путём наложения изображения (обычно прозрачного PNG или GIF), содержащего ваш водяной знак, на исходное изображение.

Наложение водяного знака на изображение

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

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

Параметры водяного знака

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

Настройка Значение по умолчанию Варианты Описание
wm_type text text, overlay Устанавливает тип водяного знака, который следует использовать.
source_image None None Устанавливает имя/путь исходного изображения. Путь должен быть относительным или абсолютным серверным путем, а не URL-адресом.
dynamic_output FALSE TRUE/FALSE (boolean) Определяет, должно ли новое изображение записываться на диск или генерироваться динамически. Примечание: если вы выберете динамический режим, одновременно может отображаться только одно изображение, и его нельзя позиционировать на странице. Он просто динамически выводит исходное изображение в браузер вместе с заголовками изображения.
quality 90% 1 - 100% Устанавливает качество изображения. Чем выше качество, тем больше размер файла.
wm_padding None Число Количество отступа, задаваемого в пикселях, которое будет применено к водяному знаку, чтобы отодвинуть его от края изображения.
wm_vrt_alignment bottom top, middle, bottom Устанавливает вертикальное выравнивание для изображения водяного знака.
wm_hor_alignment center left, center, right Устанавливает горизонтальное выравнивание для изображения водяного знака.
wm_hor_offset None None Можно указать горизонтальный отступ (в пикселях), который необходимо применить к положению водяного знака. Смещение обычно перемещает водяной знак вправо, за исключением случая, если вы установили выравнивание «right», тогда значение смещения переместит водяной знак влево от изображения.
wm_vrt_offset None None Можно указать вертикальный отступ (в пикселях), который необходимо применить к положению водяного знака. Смещение обычно перемещает водяной знак вниз, за исключением случая, если вы установили выравнивание «bottom», тогда значение смещения переместит водяной знак к верхней части изображения.

Настройки текста

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

Настройка Значение по умолчанию Варианты Описание
wm_text None None Текст, который вы хотите отобразить в качестве водяного знака. Обычно это будет уведомление об авторских правах.
wm_font_path None None Серверный путь к шрифту True Type, который вы хотите использовать. Если вы не используете этот параметр, будет использоваться родной шрифт GD.
wm_font_size 16 None Размер текста. Примечание: если вы не используете вариант True Type выше, число задается в диапазоне от 1 до 5. В противном случае вы можете использовать любой допустимый размер пикселей для используемого шрифта.
wm_font_color ffffff None Цвет шрифта, указанный в шестнадцатеричном формате. Поддерживаются как полная 6-значная запись (например, 993300), так и сокращенная 3-значная запись (например, fff).
wm_shadow_color None None Цвет тени, указанный в шестнадцатеричном формате. Если оставить пустым, тень не будет использоваться. Поддерживаются как полная 6-значная запись (например, 993300), так и сокращенная 3-значная запись (например, fff).
wm_shadow_distance 3 None Расстояние (в пикселях) от шрифта, на котором должна появиться тень.

Настройки наложения

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

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

Справочник по классам

class CI_Image_lib
initialize([$props = array()])
Параметры:
  • $props (array) – Предпочтения обработки изображений
Возвращаемое значение:

TRUE при успехе, FALSE в случае некорректных настроек

Тип возвращаемого значения:

bool

Инициализирует класс для обработки изображения.

resize()
Возвращаемое значение: TRUE при успехе, FALSE при ошибке
Тип возвращаемого значения: bool

Метод изменения размера позволяет изменить размер исходного изображения, создать копию (с изменением размера или без него) или создать миниатюру.

Практически нет разницы между созданием копии и созданием миниатюры, за исключением того, что миниатюра будет иметь маркер миниатюры в имени (например, 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) не используется, метод изменения размера вместо этого обработает исходное изображение.

crop()
Возвращаемое значение: TRUE при успехе, FALSE при ошибке
Тип возвращаемого значения: bool

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

$config['x_axis'] = 100;
$config['y_axis'] = 40;

Все предпочтения, перечисленные в таблице Настройки, доступны для этого метода, за исключением этих: rotation_angle, 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-интерфейс, который позволяет выбирать область обрезки.

rotate()
Возвращаемое значение: TRUE при успехе, FALSE при ошибке
Тип возвращаемого значения: bool

Метод поворота изображения требует, чтобы угол поворота был задан через своё предпочтение:

$config['rotation_angle'] = '90';

Есть 5 вариантов поворота:

  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();
}
watermark()
Возвращаемое значение: TRUE при успехе, FALSE при ошибке
Тип возвращаемого значения: bool

Создаёт водяной знак на изображении, для получения более подробной информации см. раздел Добавление водяного знака на изображение.

clear()
Тип возвращаемого значения: void

Метод clear сбрасывает все значения, используемые при обработке изображения. Его необходимо вызывать, если вы обрабатываете изображения в цикле.

$this->image_lib->clear();
display_errors([$open = '<p>[, $close = '</p>']])
Параметры:
  • $open (string) – Открывающий тег сообщения об ошибке
  • $close (string) – Закрывающий тег сообщения об ошибке
Возвращаемое значение:

Сообщения об ошибках

Тип возвращаемого значения:

string

Возвращает все обнаруженные ошибки, отформатированные как строка.

echo $this->image_lib->display_errors();

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/libraries/image_lib.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API