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

16.02.15

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

Предлагаю вариант использования изображений с наложением водяных знаков на хостинге с использованием 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);

}


?>


См. также

Запрет глобального поиска в конфигурации

Защита ПО и шифрование Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

Представляю вам микрорасширение, которое запрещает глобальный поиск по вашей конфигурации.

1 стартмани

09.02.2023    2226    9    aximo    4    

2

Как защитить pdf файл

Защита ПО и шифрование Абонемент ($m)

Для установки защиты pdf документа, полученного в 1С, написано консольное приложение на c#., использующее одну зависимость pdfSharp.dll. В результате работы приложения ограничены операции над документом и записаны метаданные. С помощью аргументов командной строки можно управлять работой приложения.

2 стартмани

30.01.2023    1662    1    olevlasam    3    

3

Универсальный синтаксический анализатор ASN.1 для декодирования .key, .cer, .der, .p7m, .p7s, .crt, .pem

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальный синтаксический анализатор ASN.1, который может декодировать любую допустимую структуру ASN.1 DER или BER, независимо от того, закодирована ли она в кодировке Base64 (распознаются необработанные base64, защита PEM и begin-base64) или в шестнадцатеричном кодировании.

1 стартмани

04.12.2022    2990    12    keyn5565`    0    

13

Шифрование строки на основе мастер-пароля в 1С Предприятие 8.3.19

Защита ПО и шифрование Платформа 1С v8.3 Абонемент ($m)

Демонстрация возможностей шифрования строки на основе мастер-пароля в 1С Предприятие 8.3.19. AES без zip файла, RSA, PKDF2. (c использованием библиотеки С# через com).

2 стартмани

31.08.2022    3834    7    vit59    2    

6

Обфускатор байт-кода

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка, позволяющая запутывать и шифровать байт-код, поставлять модули без исходных текстов и т.д. Протестировано на платформе 8.3.23.1739.

10 стартмани

16.06.2022    10316    80    ZhokhovM    12    

40

Как уберечь конструкторскую документацию от воровства конкурентами?

Защита ПО и шифрование Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Как уберечь конструкторскую документацию от воровства конкурентами? Недавно столкнулся с этой проблемой. Заказчик серьёзно обеспокоен утечкой информации о конструкторских разработках в адрес конкурентов, за счет подкупа исполнителей, занимающихся производством по конструкторской документации, операторов технологического оборудования и обрабатывающих центров по изготовлению деталей и сборочных единиц.

2 стартмани

09.03.2022    5657    3    ge_ni    9    

2

Защита конфигураций, обработок, расширений 1С онлайн, управление версиями

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Система построена на веб платформе, все управление происходит на сайте в личном кабинете пользователя.

1 стартмани

27.12.2021    4558    2    idm80    11    

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