Вариант изображений с водяными знаками на 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С:Предприятие 8 Россия Абонемент ($m)

Обработка для подписи с помощью сертификата (ЭЦП) произвольных файлов, средствами платформы 1С.

5 стартмани

19.06.2025    1370    1    krundel    2    

0

Защита ПО и шифрование 1С:Предприятие 8 Абонемент ($m)

Как спрятать свои секретные файлы от глаз любого? Всё просто, прячем все свои файлы (видео. документы, архивы, фото, да вообще любые файлы) в картинку или фото. Картинка при этом остается такой же красочной и визуально не изменившейся (лишь подрастет её вес). Стало интересно? Посмотри, как это делается, на скриншотах, если лень читать описание.

1 стартмани

03.06.2025    1547    user1195929    13    

4

Защита ПО и шифрование Программист 1С:Предприятие 8 Абонемент ($m)

Статья посвящена практическому применению XOR-шифрования в среде 1С:Предприятие. Рассматривается теоретическая основа операции XOR, её особенности как метода шифрования, а также преимущества и недостатки в контексте защиты данных. Подробно описываются методы реализации XOR-шифрования и дешифрования на языке 1С, включая примеры кода и практические сценарии использования, такие как шифрование паролей, защита конфиденциальных данных в файлах и передача зашифрованной информации между системами. Обсуждаются аспекты безопасности, выбор ключей, а также интеграция с другими механизмами защиты данных в 1С. Статья ориентирована на разработчиков 1С, стремящихся повысить уровень защиты информации в своих решениях.

1 стартмани

09.04.2025    2480    user1195929    6    

3

Защита ПО и шифрование Программист 1С:Предприятие 8 Россия Абонемент ($m)

Обработки, в которых реализованы алгоритмы шифрования ГОСТ 34.10-2012, RSA-1024, AES-256-GCM, XChacha20-poly1305. Реализация нативно на чистом 1С без COM-объектов и внешних компонент.

1 стартмани

17.03.2025    2806    31    alexyur    9    

6

Защита ПО и шифрование Программист 1С:Предприятие 8 1С:Управление торговлей 11 Абонемент ($m)

Небольшой пример - "лайф-хак" по установке собственного пароля на отчет или обработку, не втягивая в это RLS.

3 стартмани

06.03.2025    3006    5    aximo    23    

13

Защита ПО и шифрование Программист 1С:Предприятие 8 Бесплатно (free)

В статье приведен простой способ защиты кода внешней обработки от несанкционированного доступа (если это необходимо).

30.12.2024    8904    artemusII    25    

10

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

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

1 стартмани

09.02.2023    4505    14    aximo    5    

2

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

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

2 стартмани

30.01.2023    3560    2    olevlasam    3    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Muxomop 155 18.02.15 16:19 Сейчас в теме
Поздравляю с первой статьей на Инфостарте
2. NSerget 5 18.02.15 17:31 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация