Начиная с версии 5.9.0.18235 в Неткэте также поддерживаются функции автоматической обработки изображений, загружаемых в поля компонентов, системных таблиц и визуальных настроек.
Начиная с версии 6.1.0.21164 в Неткэте добавлена поддержка обработки изображений в формате WebP, но только для PHP версии 5.4+.
Доступность: везде, при подключении соответствующего файла
Класс предназначен для работы с изображениями и содержит набор статических методов.
Класс автоматически загружается в действиях после добавления и изменения объекта. Чтобы загрузить его в других местах, нужно подключить файл nc_imagetransform.class.php.
Сделать это можно следующем способом:
require_once($INCLUDE_FOLDER."classes/nc_imagetransform.class.php");
$INCLUDE_FOLDER, если она не определена. Перед подключением должна быть объявлена как глобальная.
string imgResize($src_img, $dest_img, $width, $height, $mode=0, $format='jpg', $quality=null, $message_id = 0, $field = 0, $color = ''ffffff')
Публичный статический метод служит для изменения размера изображения.
Параметры | Описание |
---|---|
$src_img | путь к исходному изображению |
$dest_img | путь к создаваемому изображению |
$width | ширина создаваемого изображения |
$height | высота создаваемого изображения |
$mode (опционально) | режим уменьшения: 0 — пропорционально уменьшает (по умолчанию); 1 — вписывает в указанные размеры с обрезкой; 3 — аналогично 1, но с приоритетов по ширине; 4 — аналогично 1 но с приоритетом по высоте; |
$format (опционально) | формат изображения: NULL, 'jpg', 'gif', 'png', 'webp' . Если значение параметра равно NULL (рекомендуется), формат изображения будет определен автоматически. Ввиду того, что библиотека gd не имеет встроенной поддержки bmp, обработка изображений данного формата более длительная и создает большую нагрузку на сервер, чем обработка изображений других форматов. |
$quality (опционально) | качество сжатия изображения при формате «jpg», «webp» и «png». Может принимать значения от 0 до 100 для «jpg» или «webp» и от 0 до 9 для «png». По умолчанию — 90 для «jpg» или «webp» и 6 для «png». |
$message_id (опционально) | номер объекта, к которому относится файл |
$field (опционально) | номер поля или его имя, к которому относится файл |
$color (опционально) | цвет заливки полей изображения при режиме уменьшения $mode = 3 |
Последние два параметра нужны при изменение файлов объектов или пользователей для обновления записей в таблицах.
Пример использования:
1. Необходимо уменьшить аватар пользователя (поле ForumAvatar) до размеров 120 на 120.
В действиях после добавления/изменения пользователя нужно написать:
// разрываем html-код для вставки php-кода // подключаем класс require_once($INCLUDE_FOLDER."classes/nc_imagetransform.class.php"); // определяем текущий аватар $photo_path = $DOCUMENT_ROOT.nc_file_path('User', $message, 'ForumAvatar', ""); // при наличии аватара if ($photo_path) { // вызываем статический метод класса nc_ImageTransform::imgResize($photo_path,$photo_path,'120', '120', 0, 'jpg', 90, $message, 'ForumAvatar'); }
2. Необходимо изменить размер изображения объекта. Имя поля — Photo:
В действиях после добавления нужно написать:
require_once($INCLUDE_FOLDER."classes/nc_imagetransform.class.php"); $photo_path = $DOCUMENT_ROOT.nc_file_path($classID, $message, 'Photo', ""); if ($photo_path) { nc_ImageTransform::imgResize($photo_path,$photo_path,'120', '120', 0, 'jpg', 90, $message, 'Photo'); }
3. Необходимо изменить размер изображения объекта с приоритетом по ширине и залить получившиеся поля желтым цветом. Имя поля — Photo:
В действиях после добавления нужно написать:
require_once($INCLUDE_FOLDER."classes/nc_imagetransform.class.php"); $photo_path = $DOCUMENT_ROOT.nc_file_path($classID, $message, 'Photo', ""); if ($photo_path) { nc_ImageTransform::imgResize($photo_path,$photo_path,'120', '120', 3, 'jpg', 90, $message, 'Photo', 'ffff00'); }
bool createThumb($src_img, $dest_img, $width, $height, $mode=0, $format='jpg', $quality=null)
Публичный статический метод для создания копии изображении с возможностью изменения ее размеров (создание превью).
Параметры | Описание |
---|---|
$src_img | путь к исходному изображению |
$dest_img | путь к создаваемому изображению |
$width | ширина создаваемого изображения |
$height | высота создаваемого изображения |
$mode (опционально) | режим уменьшения: 0 — пропорционально уменьшает (по умолчанию); 1 — вписывает в указанные размеры |
$format (опционально) | формат изображения: NULL, 'jpg', 'gif', 'png', 'webp' или 'bmp'. Если значение параметра равно NULL (рекомендуется), формат изображения будет определен автоматически. Ввиду того, что библиотека gd не имеет встроенной поддержки bmp, обработка изображений данного формата более длительная и создает большую нагрузку на сервер, чем обработка изображений других форматов. |
$quality (опционально) | качество сжатия изображения при формате «jpg», «webp» и «png». Может принимать значения от 0 до 100 для «jpg» или «webp» и от 0 до 9 для «png». По умолчанию — 90 для «jpg» или «webp» и 6 для «png». |
Пример использования:
При добавлении объекта с изображением (например, фотогалерея) создать превью размером 50 на 50.
Имя поля с изображением — Picture.
Имя поля для превью — Preview.
В действие после добавления объекта нужно прописать:
// если файл был закачан if ($_FILES['f_Picture'][size] != 0 ) { require_once($INCLUDE_FOLDER."classes/nc_imagetransform.class.php"); // создать превью nc_ImageTransform::createThumb('Picture','Preview',50,50); }
bool putWatermark ( $classID, $field, $message, $watermark, $mode = 0, $quality = null )
Публичный статический метод для наложения водяного знака (watermark, ватермарк) на изображение объекта.
Параметры | Описание |
---|---|
$classID | номер компонента или имя системной таблицы |
$field | номер поля или его латинское название |
$message | номер объекта |
$watermark | абсолютный или относительный путь до водяного знака |
$mode (опционально) | местоположение знака: 0 — по центру; 1 — левый верхний угол; 2 — правый верхний угол; 3 — левый нижний угол; 4 — правый нижний угол. |
$quality (опционально) | качество сжатия изображения при формате «jpg», «webp» и «png». Может принимать значения от 0 до 100 для «jpg» или «webp» и от 0 до 9 для «png». По умолчанию — 90 для «jpg» или «webp» и 6 для «png». |
Пример использования:
Есть компонент с полем Picture, при добавление объекта с изображением
надо наложить ватермарк. В действии после добавления пишем:
nc_ImageTransform::putWatermark($classID,'Picture',$message, '/images/netcat.png', 1 );
Путь до ватермарка может быть как абсолютным, так и относительным от корневой директории сайта.
bool putWatermark_file ( $filepath, $watermark, $mode = 0, $quality = null )
Публичный статический метод для наложения ватермарка на файл.
Параметры | Описание |
---|---|
$filepath | абсолютный или относительный путь до файла |
$watermark | абсолютный или относительный путь до водяного знака |
$mode (опционально) | местоположение знака: 0 — по центру; 1 — левый верхний угол; 2 — правый верхний угол; 3 — левый нижний угол; 4 — правый нижний угол. |
$quality (опционально) | качество сжатия изображения при формате «jpg», «webp» и «png». Может принимать значения от 0 до 100 для «jpg» или «webp» и от 0 до 9 для «png». По умолчанию — 90 для «jpg» или «webp» и 6 для «png». |
Пример использования (версия NetCat 5.7.0.16240+):
При добавлении и изменении объекта наложить водяной знак на правый нижний угол только новых картинок в поле типа множественная загрузка файлов.
Имя поля с изображениями — Images.
В действие после добавления (или изменения) объекта нужно прописать:
if (is_array($f_Images->records)) { require_once($INCLUDE_FOLDER . "classes/nc_imagetransform.class.php"); foreach ($f_Images->records as $record) { // Добавляем водяной знак, если изображение было только что загружено if ($record->is_new()) { nc_ImageTransform::putWatermark_file($record['Path'], '/img/watermark.png', 4); } } }
Комментарии 7
$photo_path = $DOCUMENT_ROOT.nc_file_path($classID, $message, 'Photo', "");
if ( $photo_path) {
nc_ImageTransform::imgResize($photo_path,$photo_path,'120', '120', 0, 'jpg', 90, $message, 'Photo');
}
Тут ошибка: поскольку при составлении $photo_path используется переменная $DOCUMENT_ROOT, даже если файла нет, (bool) $photo_path будет true и nc_ImageTransform::imgResize выполнится.
Нужно убирать $DOCUMENT_ROOT внутрь if.
require_once($INCLUDE_FOLDER."classes/nc_imagetransform.class.php");
nc_ImageTransform::putWatermark($classID,'img1',$message, '/images/netcat.png', 1 );
и ничего не происходит
Ошибка логики в /netcat/require/classes/nc_imagetransform.class.php
http://joxi.ru/Dr899QH40n3Rm6
Для 5.6 и ниже работает следующий пример:
____________________________________________
Номер поля выбора фотографий - 1569, замените на своё!
global $nc_core;
$records = $nc_core->db->get_col("SELECT Path FROM Multifield WHERE Message_ID = {$message} && Field_ID = 1569 ORDER BY ID LIMIT ".$f_Photo->count().",999");
if (is_array($records)) {
require_once($INCLUDE_FOLDER . "classes/nc_imagetransform.class.php");
foreach ($records as $record)
nc_ImageTransform::putWatermark_file($record, '/imgs/watermark.png', 4);
}
__________________________________________
Если в поле уже заданы размеры для уменьшения изображения, то это будет применено:
$res = $nc_core->files->field_save_file(
$class_id, $field, $message_id, array('path'=> $photo_path ));
В path можно указать путь от корня сайта или url.