Вариант изображений с водяными знаками на php

Публикация № 329972

Разработка - Защита и шифрование

Предлагаю вариант использования изображений с наложением водяных знаков на хостинге с использованием php.

Что есть:

  • - хостинг с изображениями;
  • - изображения разбросанные по папкам. Максимальное количество в папках 1000 шт.;
  • - формат изображений jpg и png;
  • - водяные знаки;
  • - небольшой скрипт php, для наложения водяных знаков.

Для чего:

                Многие из вас выгружают свой товар с изображениями на торговые площадки (Аукро, Пром и т.п.). Наложение водяных знаков на этих площадках конечно есть, но ограниченное. Бывает просто изображение или текст, что маловато. Можно конечно сразу наложить водяные знаки, но это долго.  Бывает площадки вводят ограничение на водяные – нельзя указывать адрес сайта на аукро. Данным способом можно обойтись одним экземпляром фотографии, с возможностью наложения множества разных водяных знаков.

Как это работает:

                По запросу http://imgt.вашсайт/14?w=as будет получена картинка с именем 14(jpg,png) с водяным знаком as.png. Если водяной не указывать, то но будет по умолчанию (water.png). Водяные знаки расмещены в папке water. Если картинки нет, то выведеться изображение nofoto.jpg.

 

Файл .htaccess делает жёсткую переадресацию на img.php, получить фото без водяных не выйдет. Содержимое .htaccess :

DirectoryIndex img.php

<IfModule mod_rewrite.c>

                RewriteEngine on

                # Переадресация на img.php

                RewriteRule .$ /домен/imgt/img.php [NC]

</IfModule>

 

Файл img.php производит все функции. Содержимое img.php :

<?php

// Не выводить ошибки
//error_reporting(0);


Get_Image();


function images_search($path, $filename) {
if(($dir = opendir($path)) == FALSE)
return '';
$link = '';
while(($fp = readdir($dir)) !== FALSE) {
$link = $path . '/' . $fp;
if(is_file($link)) {
if($fp == $filename.'.jpg' || $fp == $filename.'.png') {
closedir($dir);
return $link;
}
}else if(! ereg('^[\.]{1,2}$', $fp) && is_dir($link)) {
if($fp != 'water'){
if(($link = images_search($link, $filename)) != '') {
closedir($dir);
return $link;
}
}
}
}
closedir($dir);
return '';
}

// выводим картинку
function Get_Image() {

// Идентификатор изображения
$img_id = strrev($_SERVER[SCRIPT_URL]);
$img_id = strrev(substr($img_id, 0, strpos($img_id,'/')));
$img_id = preg_replace('/[^0-9]/', '', $img_id);


// Идентификатор водяного знака
if (empty($_GET['w'])){
$water_id = 'water';
}else{
$water_id = preg_replace('/[^a-zA-Z0-9]/', '', $_GET['w']);
}

$enable_water = true;

if (!empty($_GET['nw'])){
if ($_GET['nw'] == "1478963") {
$enable_water = false;
}
}

// Изображение
if($img_id == ''){
$image_file = '/home/nsait/seul.net.ua/imgt/nofoto.jpg';
$enable_water = false;
}else{
$image_file = images_search("./", $img_id);
if($image_file){
$image_file = str_replace("./", "/home/nsait/seul.net.ua/imgt", $image_file);
}else{
$image_file = '/home/nsait/seul.net.ua/imgt/nofoto.jpg';
$enable_water = false;
}
}

$pos = strripos($image_file, ".jpg");

//echo $image_file;
//exit;

if ($pos === false) {
$image = imagecreatefrompng($image_file);

//Отключаем режим сопряжения цветов
//imagealphablending($image, false);

//Включаем сохранение альфа канала
imagesavealpha($image, true);

} else {
$image = imagecreatefromjpeg($image_file);
}


if ($image === false) {
return false;
}


if($enable_water){
// Водяной знак
$watermark_file = '/home/nsait/seul.net.ua/imgt/water/'.$water_id.'.png';

if(!file_exists($watermark_file)){
$watermark_file = '/home/nsait/seul.net.ua/imgt/water/water.png';
}
$watermark = imagecreatefrompng($watermark_file); // создаЄм вод¤ной знак


//если что-то пойдЄт не так
if ($watermark === false) {
return false;
}

// получаем значени¤ высоты и ширины изображени¤
$image_width = imagesx($image);
$image_height = imagesy($image);

// получаем значени¤ высоты и ширины вод¤ного знака
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);


$rate_width = $image_width/$watermark_width;
$rate_height = $image_height/$watermark_height;

if ($rate_width > $rate_height)
$rate = $rate_height;
elseif ($rate_width < $rate_height)
$rate = $rate_width;
elseif ($rate_width = $rate_height)
$rate = $rate_height;


// Если
if ($rate < 1) {
$watermark_width = $watermark_width*$rate;;
$watermark_height = $watermark_height*$rate;

$new_watermark = imageCreateTrueColor($watermark_width, $watermark_height);
imageAlphaBlending($new_watermark, false);
imageSaveAlpha($new_watermark,true);
imageCopyResampled($new_watermark, $watermark, 0, 0, 0, 0, $watermark_width, $watermark_height, imagesx($watermark), imagesy($watermark));
} else {
$new_watermark = $watermark;
}


// помещаем вод¤ной знак на изображение
$dest_x = $image_width - $watermark_width;
if ($dest_x <> 0)
$dest_x = $dest_x/2;

$dest_y = $image_height - $watermark_height;
if ($dest_y <> 0)
$dest_y = $dest_y/2;

// создаем новое изображение
imagecopy($image, $new_watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);

// освобождаем память
imagedestroy($watermark);
imagedestroy($new_watermark);
}

if ($pos === false) {
header('content-type: image/png');
imagepng($image);

} else {
header('content-type: image/jpeg');
imagejpeg($image, null, 100);
}

// освобождаем память
imagedestroy($image);

}


?>


Специальные предложения

Оставьте свое сообщение

См. также

От Hello world - к защите конфигураций за 1 минуту Промо

Защита и шифрование Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

Вы всегда хотели но боялись создать COM объект? Тогда мы идем к вам! С обычным блокнотом, где будем программировать на c#, и таймером ...

19.05.2012    34945    O-Planet    130    

Обезличивание базы средствами Конвертации данных 2

Защита и шифрование v8 КД Бесплатно (free)

Быстро, просто, понятно обезличить нужные данные в любой базе.

14.06.2020    2264    Yashazz    20    

Расшифровка DataMatrix кода с пачки сигарет (табачная продукция)

Защита и шифрование v8 Россия Бесплатно (free)

Разбор считанного DataMatrix кода с пачки сигарет - какие символы за что отвечают. Декодирование МРЦ

07.06.2020    5339    Tasselhof    10    

Кодирование по алфавиту. Большие целые числа

Защита и шифрование v8 1cv8.cf Бесплатно (free)

А вы знали, что 1С умеет в очень длинные числа? Кодирование информации в строку по указанному алфавиту, возможен любой алфавит и не только. В тексте приведён алгоритм для кодирования последовательности байт в любой и из любого односимвольного алфавита.

14.05.2020    1382    mrsmrv    5    

SHA512 и HMAC512 на 1С 8 без использования внешних компонент

Защита и шифрование v8 1cv8.cf Бесплатно (free)

Имплементация алгоритма расчета Hash 512 с ключом и без. С ключом по алгоритму HMAC. Используются механизмы платформы начиная с версии 8.3.11.

29.04.2020    2793    mrsmrv    21    

Танцы с бубном! Создаём демонстрационную базу

Защита и шифрование v8 Бесплатно (free)

В статье кратко расскажу Вам о моём опыте создания демонстрационной версии базы данных 1С и способах защиты кода.

08.02.2018    15206    user748289    41    

Симметричное шифрование в 1С

Защита и шифрование v8 1cv8.cf Бесплатно (free)

Настоящая статья посвящена реализации в 1С симметричного шифрования встроенными механизмами

02.06.2015    27171    alex271    8    

Защита конфигурации от ...

Защита и шифрование v8 1cv8.cf Бесплатно (free)

Бывают моменты в жизни, когда нужно сделать возможность входа только одному пользователю после определенного времени. Ниже приведен такой код.

18.05.2015    19027    hakerxp    29    

Хеширование данных с ключом по алгоритму SHA-1 штатными средствами 1С

Практика программирования Защита и шифрование v8 1cv8.cf Бесплатно (free)

Расчет хеш суммы данных по алгоритму SHA-1 с ключом штатными средствами 1С.

27.05.2014    27827    dour-dead    15    

Про использование криптографии в 1С

Защита и шифрование Россия Бесплатно (free)

В последнее время очень популярной стала тема использования шифрования и цифровой подписи (ЭЦП). Возможности удобного использования криптографических преобразований встроены и в 1С. Однако достаточно много людей упускают один важный момент - почти все прикладные решения, использующие криптографию, должны быть выполнены исключительно при наличие лицензии ФСБ. Об этом и пойдёт речь в данной статье.

09.09.2013    35120    y-str    153    

Разрабатываем систему защиты авторских прав. Урок 1. Мозговой штурм

Защита и шифрование Бесплатно (free)

Если вы профессиональный программист, то не раз, наверное, задумывались о том, что бы создать какую то авторскую программу и продавать ее (а может уже продаете). Согласитесь, неплохо - один раз написали программу, а потом сидите в кресле (в шезлонге на Канарском пляже), потягиваете пивко с рыбкой, а денежки идут. Но есть одна проблема - как же надежно защитить свою нетленку от злобных пиратов, которые так и норовят обломать вас в вашей светлой мечте. Действительно, кто будет покупать программу, над создание которой вы пролили тонны соленого пота и крови, если ее можно спокойно скопировать у приятеля, или, говоря юридическим языком, украсть.

03.04.2013    16397    megabax    10    

MD5 Hash файла

Защита и шифрование Универсальные функции Бесплатно (free)

Получение md5 хэша для файла

10.03.2011    48779    d0dger    24    

В помощь пользователям КЗК 2

Защита и шифрование v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

Задача: Защитить внеш. обработку или отчет с помощью КЗК 2 - передать клиенту с тем что бы он мог ее запустить, но без копирования файла precomp.dll в каталог ИБ. Так же может применяться и для блоков конфигурации.

28.01.2010    29725    script    42    

И ещё несколько слов о защите разработок...

Защита и шифрование v8 1cv8.cf Россия Бесплатно (free)

Дневные мысли о механизмах защиты кода... (по мотивам http://www.infostart.ru/profile/8914/blogs/660/)

30.10.2008    40093    ValeriVP    79    

Ещё пара слов о защите разработок..

Защита и шифрование Россия Бесплатно (free)

Ночные мысли о механизмах защиты кода..

22.10.2008    20157    Дуб    51    

Защита интеллектуальной собственности для 8 (простые примеры разработки)

Защита и шифрование Россия Бесплатно (free)

Небольшой экскурс в технологии которые могут быть полезны. ( если ставите отрицательные оценки то потрудитесь объяснить за что). код примитивен? - это не минус, это только плюс,

28.02.2008    17255    Legavaz    39