• Обратная связь
  • Карта сайта
  • Отзыв
  • Комментарии
  • Форум
discord
Технические заметки
  • Главная
  • Лекции
  • Практикум
  • Обзоры
  • Сравнение
  • Нормы
  • События
  • Вход
ГлавнаяMaxSite CMS
Выводим картинки в компоненте для MaxSite CMS.
Новая версия плагина галерей для MaxSite CMS Taggallery-2.1

Компонент для MaxSite CMS, создающий в header коллаж из изображений

29 ноября 2011 г.Просмотров: 1892Комментарии: 0
MaxSite CMSMaxSiteПлагин

Для плагина Taggallery задумал вывод n изображений (случайных, лучших, ... ) в шапке сайта. Их нужно не просто вывести, а сделать из них коллаж.

В процессе знакомства с графическими функциями библиотеки php gd2 получился функционал, осуществляющий коллаж из изображений в заданной папке. Результат можете наблюдать в шапке этого блога. Плагин Taggallery пока не причем.

Все что получилось, оформил в виде компонента header_collage.

В архиве находится файл header_collage.php, который нужно разместить в каталоге components шаблона.

Скачать: header_collage.zip

Если ваш шаблон не поддерживает компоненты - можно просто подключить этот файл где нужно.

Кроме того, в архиве каталог header_collage, в котором демо-картинки.

Этот каталог нужно разместить в каталоге uploads/, не забыв при этом выставить права на каталог 777 (если загружаете картинки не встроенным загрузчиком, а по ftp или через панель хостинга).

Состав изображений uploads/header_collage/

Служебные изображения:

ramka.png - рамка.

header.jpg - основа шапки (на которую накладываются).

result.jpg - результат коллажа.

Все остальные изображения *.jpg и *.jpeg , если они не начинаются на "_", участвуют в коллаже.

Скрипт берет n случайных изображений, накладывает их на рамку, поворачивает и распределяет по изображению-основанию.

Настройки коллажа.

В самом начале файла компонента все настройки:

$par['source_dir'] = 'header_collage'; // директорий в uploads, где исходные картинки;
$par['width'] = 150; // ширина элемента коллажа;
$par['height'] = 113; // высота элемента коллажа;
$par['pointx'] = 40; // начальная точка вывода элементов;
$par['pointy'] = 30; // где будут выведены элементы по высоте;
$par['angle'] = array(20,-15,25,10,20,-10,15,25,-15); // углы на которые будут повернуты элементы;
$par['borderx'] = 6; // бордюр рамки за изображением по x;
$par['bordery'] = 8; // бордюр рамки за изображением по y;
$par['stepx'] = 150; // шаг вывода элементов;
$par['count'] = 5; // кол-во элементов;
$Cache_key=’’; - ключ Кеша: указать чтобы новая шапка строилась только после сброса кеша.

После настройки коллажа нужно указать значение ключа Кеша, например header_collage.

Обращаю внимание, что не рамка накладывается на изображение, а наоборот: сперва рамка уменьшается в заданные размеры, а затем картинка делается меньше рамки на бордюр.

(Кому-то может быть удобнее будет наоборот.)

Может скажете: массив углов лучше генерировать случайно - не спорю, но не всегда красиво получится.

Следующее возможное замечание: нужно делать каждое повернутое изображение в рамке png картинкой и выводить сверху основы средствами html, делая кликкабельными со ссылкой на оригинал изображения – согласен и буду благодарен, если кто-то подскажет как это реализовать(мой мозг неспособен понять поведение div-ов).

Еще где-то читал, что можно делать хитрые изображения-карты с участками-ссылками – но . . . чего только не бывает.

Функции компонента.

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

Приведу пояснения по функциям - вдруг кто-то захочет их модифицировать.

function rotate_img_collage

[spoiler]

function rotate_img_collage($ramka , $img , $angle , $width , $height , $borderx , $bordery)
{
  $res = imagecreatetruecolor($width,$height);
  $trans = imagecolorat($res,0,0);
  imagecopyresized ($res,$ramka,
                            0,0,
                            0,0,
                           $width,$height,
                            imagesx($ramka),imagesy($ramka));
  $trans = imagecolorat($res,0,0);
  imagecolortransparent($res,$trans);
  $trans = imagecolorat($res,0,0);
  imagecopyresized ($res,$img,
                            $borderx,$bordery,
                            0,0,
                            $width-2*$borderx,$height-2*$bordery,
                            imagesx($img),imagesy($img));
  $res = imagerotate($res, $angle ,-1);
  imagealphablending($res, true); 
  imagesavealpha($res, true); 
  return $res; 
}

[/spoiler]

Эта функция получает такие параметры:

$ramka - ресурс рамки;

$img - ресурс накладываемого изображения;

$angle - угол поворота;

$width - ширина !до поворота;

$height - высота !до поворота;

$borderx - зазор между рамкой и изображением по x;

$bordery - зазор - по y;

Результатом функции - ресурс наложенного на рамку и повернутого изображения.

header_collage

function header_collage($array_fn_img , $fn_ramka, $fn_header , $fn_result , $width, $height , $borderx , $bordery , $pointx , $pointy , $angle , $stepx)
{
  $ramka = imagecreatefrompng($fn_ramka); 
  $header = imagecreatefromjpeg($fn_header); 
  foreach ($array_fn_img as $i=>$fn_img)
  {
     $img = imagecreatefromjpeg($fn_img); 
     $res = rotate_img_collage($ramka , $img , $angle[$i] , $width , $height , $borderx , $bordery);
      imagecopy ( 
                            $header, 
                            $res, 
                            $pointx+$stepx*$i , $pointy, 
                            0, 0, 
                            imagesx($res),imagesy($res)
          );
  }
  imagejpeg($header,$fn_result); 
}

Функция получает:

$array_fn_img - массив полных путей к файлам картинок

$fn_ramka - полный путь к файлу рамки;

$fn_header - полный путь к файлу основы;

$fn_result - полный путь к тому, куда будет результат;

$width - ширина элемента с рамкой;

$height - высота элемента с рамкой;

$borderx - бордюр по x;

$bordery - бордюр по y;

$pointx - начальная точка x;

$pointy - начальная точка y;

$angle - массив углов поворота;

$stepx - шаг выводаизображений;

Функция последовательно берет из массива картинку, угол; накладывает на рамку, поворачивает, отступает на шаг от НАЧАЛА предыдущего и накладывает на основу.

Результат действия будет в файле с именем в переменной $fn_result.

Что надо бы улучшить.

1. Хотелось бы социальные кнопки вывести поверх шапки в левом верхнем углу, как в компоненте logo-inks.

2. Не знаю: стоит ли делать опции компонента в админке - влом.

3. Наклоненные в рамках изображения полноразмерные картинкиповерх шапки-основы лучше вывести средствами html, чтобы ссылки с них были lightbox, или вели на страницы картинки, формируемые плагином Taggallery.

Еще записи по теме

Новая версия плагина галерей для MaxSite CMS Taggallery-2.1
Новая версия плагина галерей для MaxSite CMS Taggallery-2.1
Сохраняем EXIF при изменении изображения в плагине Taggallery.
Сохраняем EXIF при изменении изображения в плагине Taggallery.
Галерея изображений для MaxSite CMS Taggallery-2-0
Галерея изображений для MaxSite CMS Taggallery-2-0
Плагин CSV Banner для импорта списка товаров AliExpress в MaxSite CMS
Плагин CSV Banner для импорта списка товаров AliExpress в MaxSite CMS
Создание коллажа изображений Taggallery на MaxSite CMS.
Создание коллажа изображений Taggallery на MaxSite CMS.
Новая версия плагина галерей для MaxSite CMS Taggallery-2.2.
Новая версия плагина галерей для MaxSite CMS Taggallery-2.2.
Оставьте комментарий.

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question


Выберите для анонимного комментирования (комментарий будет опубликован после проверки).

     

  

Выберите если нужно войти или зарегистрироваться и оставить комментарий от своего аккаунта.

Войти, используя

(обязательно)

Подписка на новости
discord

Email:

Регистрация

Вход через
Разделы
  • Пожарная сигнализация124
    • Инструкции13
    • Проекты2
  • Автоматика57
  • Отопление33
  • Мониторинг30
  • Электрика17
  • Пожаротушение32
  • Умный дом32
  • Arduino12
  • Гаджеты32
  • MaxSite CMS26
Актуальное
  • СП 484
  • Автоматизация теплого пола
  • Болид vs Рубеж
  • С2000-АСПТ
  • ПЦН в кармане
  • Системы противопожарной зашиты
  • Cloud IoT
  • Проектирование
  • Программирование
  • Ссылки
Последние комментарии
Можно ли использовать независимый расцепитель в противопожарных системах
  • Виталий » "Примечание. В статье применяется аббревиатура СПА (системы противопожарной автоматики), которая может резать глаза. Но к ней стоит привыкать, ибо аббревиатуру...
  • Андрей » Неправда Ваша. "Мысль изречённая есть ложь." Но это и не система сигнализации, а система оповещения.
  • Андрей » Замечательная статья, все по делу, все по полочкам, основательный инженерный подход, спасибо! И я тоже проходил подобные искания и копания,...
  • Андрей » Спасибо. Если данный участок расположен внутри щита (шкафа) управления вентиляцией, то контролировать его целостность не требуется, т.к. этот участок не подпадает...
  • Андрей » Думаю для данного случая подходит вариант из п.3.20: "между системой пожарной автоматики и другими инженерными системами" Корпус щита, шкафа вентиляции не является...
Последние загрузки
Все загрузки
Дискуссии на форуме
  • КПБ
  • Выбор ОПС для коттеджа
  • Отключение питания раздвижных дверей при пожарном сценарии.
Реклама

W3230 LED Digital Thermostat Temperature Control DC 12V AC 110V 220V 20A Mini LED Display Thermostat Waterproof Probe

Tuya WiFi GAS LPG Leak detector alarm Security APP Control Safety smart home Leakage sensor

1080P Full HD Wireless IP Camera Wifi IP CCTV Camera Wifi Mini Network Video Surveillance Auto Tracking Camera IR Night Vision

Пожарка 126 Проектирование 98 Болид 64 Лекции 58 Социальное 53 Рубеж 49 Обзор 47 Автоматика 46 Инженерные системы 39 Курьез 36 Практикум 36 Адресные системы 35 Пожаротушение 34 Отопление 33 Интернет Вещей 29 MaxSite 28 ГОСТ 26 Облачный Сервис 24 Терморегуляторы 24 Мониторинг 22 Теплый пол 21 Плагин 21 Сравнение 20 AliExpress 20 Вентиляция 20 Законы Ома 20 ППУ 20 Техобслуживание 19 Эксплуатация 19 СП 484 19 Астра 17 ППК 17 Клапана 15 Электрика 14 С2000-АСПТ 14 Arduino 13 Рубикон 13 Оповещение 13 WiFi 12 С2000М 12 Ritm 11 Гранд Магистр 11 Датчики 11 Насосная Станция 11 ESP8266 10 Юнитест 10 ПЦН 9 ВЭРС 9 Сценарии 8 Авария 8 Жилой дом 8 Taggallery 7 Отзыв 7 Освещение 7 Программирование 7 Сообщества 7 Диспетчеризация 7 Плазма-Т 6 Гаджеты 5 ПО 5 С2000-СП4 5 Спрут-2 5 Радиоканал 4 МПН 4 GeoRITM 4 МПТ 4 Версет 3 Firesec3 3 Гранит 3 РИП 3 Баня 3 Учет ресурсов 3 ИПДЛ 3 Navigard 3 Visio 3 Рубеж-2ОП 3 My_ESP8266 3 Гидравлика 2 Задвижка 2 Zigbee 2 Security Hub 2 ТО 2
  • Обратная связь
  • Карта сайта
  • Отзыв
  • События
  • Комментарии
  • Форум
© Технические заметки 2026. Работает на MaxSite CMS. ( Вход )
Автор не несет ответственность за последствия применения материалов сайта на практике.