.
top
logo
Воскресенье, 24 Сентября 2017 года

Популярная услуга

Оптимизация сайта в Одессе

Услуги

Объявления


Hosting Ukraine

Главная Учебник WebAsyst Модуль наложения WATERMARK для WebAsyst
Модуль наложения WATERMARK для WebAsyst PDF Печать E-mail

В последнее время много вопросов как поступало по поводу модуля наложения водяного знака на картинку. 

Модуль для наложения водяног знака:
Когда клиент открывает страницу, например, категории товаров, его браузер запрашивает картинки с сервера. Сервер перенаправляет запрос на модуль.
Модуль берет картинку товара и картинку ватермарка, соединяет и выдает браузеру. Если включено кеширование то эта картинка сохраняется и в будущем сервер не будет нагружаться для соединения картинок, а просто будет выдавать готовую.
Если вы не обладаете уверенностью в своих знаниях устройства движка и работы сервера то лучше уточните соответствие требованиям у хостера и сразу переходите к разделу УСТАНОВКА

Технические требования:
PHP: 5 и выше
Свободное место на диске равное размеру папки products_images в том случае если используется кеширование.
Рекомендуемо
Сервер: Apache(back-end), nginx(front-end)
Минимально
Сервер:Apache

ДЛЯ СПЕЦИАЛИСТОВ:
При установке модуля мы меняем папку хранения картинок товаров.
После установки мы имеем:
products_pictures - папка с кешированными картинками, туда будут падать картинки уже с ватермарком(если включено кеширование)
products_pictures_source - папка с исходными картинками(без ватермарка), туда скрипт будет загружать картинки из админки.

Тем самым происходит следующее:
Если: Apache(back-end), nginx(front-end)
Nginx заходит в папку products_pictures, не находит там запрошенной картинки и проксирует запрос к Apache. Apache читает файл .htaccess видит там реврайт на модуль и перенаправляет запрос к модулю.
Если включено кеширование
Модуль проверяет наличие картинки в кеше(products_pictures), допустим её там нет. Далее проверяет наличие файла в папке с исходными изображениями(products_pictures_source).
Берет исходную картинку, накладывает ватермарк.
Записывает готовое изображение в папку кеша(products_pictures) и напрямую выдает изображение браузеру.
При следующем заходе Nginx обнаружит файл в кеше и напрямую отдаст его без участия apache тем самым не нагружая сервер.
Если кеширование выключено
То записи в кеш происходить не будет и при каждом запросе будет происходить сведение исходного изображения и ватермарка.

Если: только Apache
Для начала хотелось бы сразу сказать что если у вас такая ситуация то вам стоит задуматься о смене хостера или об установке nginx т.к. по моему скромному мнению ресурсы сервера вы используете нерационально. Конечно за исключением частных случав.
Если включено кеширование
И так, поступает запрос на картинку, Apache видит реврайт и отдает запрос сразу скрипту. Скрипт проверяет изображение в кеше, если находит то сразу отдает браузеру. Если не находит то берет исходное изображение и сводит с ватермарком, сохраняет в кеш и опять же отдает браузеру.

Если кеширование выключено
Apache не находит изображение в кеше и при каждом запросе своди исходное изображение с ватермарком, генерируя тем самым нагрузку на сервер. И отдает браузеру сведенную картинку.



УСТАНОВКА
ИМЯ_ВАШЕЙ_БАЗЫ необходимо писать заглавными буквами точ в точ как оно указано, в противном случае на серверах под управлением операционных систем семейства Linux,  скрипт может работать некорректно
1. Заходим на FTP и папку /published/SC/html/scripts/cfg/
2. В файле connect.inc.wa.php заменяем строку(у меня это 112 строка):

Код:

define('DIR_PRODUCTS_PICTURES', DIR_PUBLICDATA_SC.'/products_pictures');

на

Код:

define('DIR_PRODUCTS_PICTURES', DIR_PUBLICDATA_SC.'/products_pictures_source');

3. В браузере заходим в инсталлер(http://адрес_вашего_сайта/installer), переходим  Настройки ->База данных
4. В самом верху увидим Редактировать ИМЯ_ВАШЕЙ_БАЗЫ. Запоминаем что написано на месте ИМЯ_ВАШЕЙ_БАЗЫ. Браузер теперь можно закрыть.
5. На FTP в корне сайта находим и открываем файл .htaccess и перед #shop добавляем следующую строку:

Код:

RewriteRule ^published/publicdata/ИМЯ_ВАШЕЙ_БАЗЫ/attachments/SC/products_pictures/(.*)$ 
products_pictures_watermark.php?photo=$1 [L]

заменив в ней ИМЯ_ВАШЕЙ_БАЗЫ на имя вашей базы полученное в предыдущем пункте.

6.В корне сайта создаем файл products_pictures_watermark.php
7. В этот файл записываем следующий код:

Код:

<?
/**
 * Watermark Plugin
 *
 *
 * @author        Dudin Andrey
 * ICQ                  270576635
 * E-mail              doodin201@gmail.com
 * @link                http://forum.webasyst.ru/profile.php?id=8134
 * @since        Version 1.0
 * 
 * */
//define('BD_NAME', 'BD_NAME'); //РАСКОММЕНТИРУЙТЕ ТОЛЬКО В СЛУЧАЕ ЕСЛИ СКРИПТ НЕ НАХОДИТ ИМЯ ВАШЕЙ БД
if (!defined(BD_NAME)) {
    $bd_name = scandir('published/publicdata/');
    define('BD_NAME', $bd_name[2]);
}
define('SC_PATH', 'published/publicdata/' . BD_NAME . '/attachments/SC/');
define('IMAGES_FOLDER', 'products_pictures_source'); //Имя папки где лежат изображения без ватермарка
define('WATERMARK_PERCENT', 25); //Сколько процентов от изображения будет занимать ватермарк
define('HEIGHT_BORDER', 0); //Отступ по вертикали
define('WIDTH_BORDER', 0); //Отступ по горизонтали
/*
 * РАСПОЛОЖЕНИЕ ВАТЕРМАРКА ПО ВЕРТИКАЛИ:
 * TOP - сверху
 * BOTTOM - снизу
 */
define('POSITION_Y', 'BOTTOM');
/*
 * РАСПОЛОЖЕНИЕ ВАТЕРМАРКА ПО ГОРИЗОНТАЛИ:
 * LEFT - слева
 * RIGHT - справа
 */
define('POSITION_X', 'RIGHT');
/*
 * КЕШИРОВАНИЕ
 * 
 * Если нагрузка на процессор не страшна, а место дорого то стоит выбрать FALSE
 * СОВЕТУЮ ОСТАВИТЬ TRUE ВО ИЗБЕЖАНИЕ САНКЦИЙ ОТ ХОСТЕРА
 */
define('CATCHING', TRUE); //Использовать кэширование? (TRUE-Да, FALSE-Нет)
/*
 * Имя папки куда складывать изображения с ватермарком(КЭШ)
 * ЭТА ПАПКА СТАНДАРТНА ДЛЯ ДВИЖКА 
 * ЛУЧШЕ НЕ ТРОГАТЬ ЭТОТ ПАРАМЕТР
 */
define('CATCHE_IMAGES_FOLDER', 'products_pictures');
/*
 * НИЖЕ НИЧЕГО ТРОГАТЬ НЕ НУЖНО
 */
$watermark_image = SC_PATH . 'images/watermark.png'; //Картинка водяного знака
$no_image_file = SC_PATH . 'images/nofile.jpg'; //Картинка-заглушка, на случай если запрошенный файл не будет найден.
$product_image = SC_PATH . IMAGES_FOLDER . "/" . $_GET['photo'];
$cache_image = SC_PATH . CATCHE_IMAGES_FOLDER . "/" . $_GET['photo'];
function get_image_res($image_info, $path) {
    switch ($image_info[2]) {
        case 1:
            $type = 'GIF';
            $image = imagecreatefromgif($path);
            break;
        case 2:
            $type = 'JPEG';
            $image = imagecreatefromjpeg($path);
            break;
        case 3:
            $type = 'PNG';
            $image = imagecreatefrompng($path);
            break;
    }
    return $image;
}
if (!file_exists($cache_image) or CATHING==FALSE) {
    if (file_exists($product_image)) {
        $image_info = getimagesize($product_image);
        $file_exist = TRUE;
    } else {
        $product_image = $no_image_file;
        $file_exist = FALSE;
    }
    $image_info = getimagesize($product_image);
    $width = $image_info[0]; //width
    $height = $image_info[1]; //height
    $image = get_image_res($image_info, $product_image);
    $output_image = imagecreatetruecolor($width, $height);
    imagecopyresampled($output_image, $image, 0, 0, 0, 0, $width, $height, imagesx($image), imagesy($image));
    if ($file_exist) {
        $watermark = imagecreatefrompng($watermark_image);
        $wat_width = (int) (($width / 100) * WATERMARK_PERCENT);
        $koeffx = $wat_width / imagesx($watermark);
        $koeffy = $wat_width / imagesy($watermark);
        $koeff = $koeffx > $koeffy ? $koeffy : $koeffx;
        $watermark_width = intval(imagesx($watermark) * $koeff);
        $watermark_height = intval(imagesy($watermark) * $koeff);
        $position_y = POSITION_Y == 'TOP' ? HEIGHT_BORDER : $height - $watermark_height - HEIGHT_BORDER;
        $position_x = POSITION_X == 'LEFT' ? WIDTH_BORDER : $width - $watermark_width - WIDTH_BORDER;
        imagecopyresampled($output_image, $watermark, $position_x, $position_y, 0, 0, $watermark_width, 
$watermark_height, imagesx($watermark), imagesy($watermark));
    }
    if (CATCHING) {
        imagepng($output_image, $cache_image);
    }
    imagedestroy($watermark);
} else {
    $image_info = getimagesize($cache_image);
    $output_image = get_image_res($image_info, $cache_image);
}
header('Content-type: image/png');
imagepng($output_image);
imagedestroy($output_image);
?>

8. В папку /published/publicdata/ИМЯ_ВАШЕЙ_БАЗЫ/attachments/SC/images/ заливаем файл watermark.png котрый является изображением которое будем накладывать на картинки товаров.
9. Папку /published/publicdata/ИМЯ_ВАШЕЙ_БАЗЫ/attachments/SC/products_pictures необходимо переименовать в products_pictures_source и рядом создать пустую папку products_pictures
10. Папке products_pictures нужно выставить права 775 или 777.


ЕСЛИ У ВАС ИЗМЕНИЛСЯ ВАТЕРМАРК
Вы просто заливаете новый в папку куда лили старый(см Установка) и очищаете папку кеша (по умолчанию она /published/publicdata/ИМЯ_ВАШЕЙ_БАЗЫ/attachments/SC/products_pictures)


НАСТРОЙКИ
Скрипт вполне работоспособен с базовыми настройками. Настроить скрипт можно открыв его для редактирования. Все настройки находятся в шапке файла: /products_pictures_watermark.php

http://supershop.od.ua/index.php?option=com_content&view=article&id=61:joomla-admin&catid=15:joomla&Itemid=154

 

Это полезно знать


bottom
top

Последние статьи

Способы оплаты

Поиск по сайту

Пожертвования


Пожертвовать

Точные апдейты Яндекса и Google


bottom

Создание сайта в Украине BisnesLuck! Заказать сайт по телефону Установить интернет магазин аренда магазина
Яндекс.Метрика