Сервис для нанесения водяного знака своими руками на PHP

На работе возникала необходимость нанесения водяного знака на техническое свидетельство. Водяной знак представлял собой обычно 4-5 строк текста.

В начале я данную задачу делал обычно при помощи графической программы Photoshop. Однако со временем надоело выполнять данную задачу в ручную и пришла идея написать готовый скрипт на PHP (тем более проблем с разворачиванием сервера не было, т.к. для разработки уже использовался локальный сервер). Задача написания скрипта оказалось простой и не сложной. Итак, приступим.

В начале необходимо создать вот такую структуру папок и файлов на вашем локальном сервере:

Структура файлов и папок

В папке fonts мы удобно поместили шрифт, используемый для написания текста водяного знака. Я использовал шрифт Moscow Sans Regular. Вы же можете воспользоваться любым своим шрифтом.

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

Папка source необходима для наших исходных изображений, на которые будет накладываться водяной знак. Кстати, я для своей задачи использовал 17 изображений, представляющих отсканированные страницы формата А4. Естественно можно помесить в нее как одно изображение, так хоть сотню. Просто увеличется время выполнения скрипта. Однако, не рекомендую слишком большое количество файлов.

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

Форма для данных водяного знака

Размер шрифта и угол наклона уже настроены оптимально. Еще после наложения знака значения строк сохраняются в сессию. Если хотите вернуть значения по умолчанию, то необходимо нажать на кнопку «Сбросить значения». По умолчанию значения строк заполнены некоторым текстом, который можно изменить в файле index.php.

В файле create.php разместим сам код для наложения водяного знака на наши исходные изображения. В случае успеха будет сделано перенаправление на index.php и вывод сообщения об успехе.

Для оформления я использовал css-фреймворк bootstrap и собственный файл css-стилей.

Файл style.css

body {
    background-color: #222;
    color: #fff;
}
input[type=text]{
    border-radius: 0;
    width: 400px !important;
}
button.btn{
    border-radius: 0;
}
div.alert-success {
    margin-top: 10px;
    border-radius: 0;
    width: 400px;
}
.width100p {
    width: 100% !important;
}
.noresize {
    resize: none;
    border-radius: 0;
}

Файл index.php

<?php
session_start();

$text = [
'Техническое свидетельство и Техническая оценка',
'выданы: ООО "Организация"',
'объект: ООО "Название объекта"',
'по адресу: г. Название, ул. Название, д. 1'
];
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Водяной знак для тех. свидетельства</title>
<link rel="stylesheet" href="../css/bootstrap.min.css"/>
<link rel="stylesheet" href="../css/style.css"/>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-sm-12">
<br>
<a href="/" class="btn btn-default">Назад</a>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<h3>Данные для водяного знака</h3>

<? if ($_GET['result'] == 'success'){?>
<div class="alert alert-success" role="alert">Водяной знак успешно наложен.</div>
<?}?>

<?
if (!isset($_GET['result']) && $_GET['result'] != 'success') {
unset($_SESSION['text']);
}
?>

<form method="post" action="create.php">
<div class="form-group">
<label>Строка 1</label>
<input type="text" name="text[]" class="form-control" value="<?= isset($_SESSION['text']) ? htmlspecialchars($_SESSION['text'][0]) : htmlspecialchars($text[0]) ?>">
</div>
<div class="form-group">
<label>Строка 2</label>
<input type="text" name="text[]" class="form-control" value="<?= isset($_SESSION['text']) ? htmlspecialchars($_SESSION['text'][1]) : htmlspecialchars($text[1]) ?>">
</div>
<div class="form-group">
<label>Строка 3</label>
<input type="text" name="text[]" class="form-control" value="<?= isset($_SESSION['text']) ? htmlspecialchars($_SESSION['text'][2]) : htmlspecialchars($text[2]) ?>">
</div>
<div class="form-group">
<label>Строка 4</label>
<input type="text" name="text[]" class="form-control" value="<?= isset($_SESSION['text']) ? htmlspecialchars($_SESSION['text'][3]) : htmlspecialchars($text[3]) ?>">
</div>
<div class="form-group">
<label>Строка 5</label>
<input type="text" name="text[]" class="form-control" value="<?= isset($_SESSION['text']) ? htmlspecialchars($_SESSION['text'][4]) : htmlspecialchars($text[4]) ?>">
</div>

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: