Сервис для нанесения водяного знака своими руками на PHP
<div class=»form-group»>
<label>Размер шрифта</label>
<input type=»text» name=»sizeFont» class=»form-control» value=»54″ style=»width: 60px !important;»>
</div>
<div class=»form-group»>
<label>Угол наклона вод. знака</label>
<input type=»text» name=»angleText» class=»form-control» value=»30″ style=»width: 60px !important;»>
</div>
<button type=»submit» class=»btn btn-success»>Наложить водяной знак</button>
<? if (isset($_SESSION[‘text’])) {?>
<a href=»/watermark/» class=»btn btn-warning»>Сбросить значения</a>
<?}?>
</form>
</div>
</div>
</div>
</body>
</html>
Особых комментариев по данному коду не стану делать. Все итак довольно просто и понятно. Переменная $text является массивом всех строк для водяного знака, т.е. каждая новая строка — это новый элемент массива $text.
А вот и сам более интересный файл create.php.
<?php session_start(); /** * Создание водяного знака */ if ($_POST){ $arrText = array_diff($_POST['text'], ['']); // Из массива отсеиваем пустые строки $sizeFont = (int)$_POST['sizeFont']; $angleText = (int)$_POST['angleText']; $fontPath = dirname(__FILE__) . '/fonts/MoscowSansRegular.ttf'; $sourcePath = dirname(__FILE__) . '/source/'; $outputPath = dirname(__FILE__) . '/output/'; /** * @param $img Идентификатор изображения, на которое добавляется водяной знак * @param $text Текст надписи * @param $font Имя файла шрифта .ttf * @param int $r Цвет надписи в формате RGB * @param int $g Цвет надписи в формате RGB * @param int $b Цвет надписи в формате RGB * @param int $alpha Уровень прозрачности от 0 до 128 * @return mixed */ function addWatermark($img, $text, $font, $r = 128, $g = 128, $b = 128, $alpha = 100) { if(!is_array($text)) return false; $width = imagesx($img); $height = imagesy($img); $angle = 30; $c = imagecolorallocatealpha($img, $r, $g, $b, $alpha); $size = 54; $offset = 100; // Смещение между строками для оси Y // Нанесение текста из массива со смещением по оси Y for($i=0;$i<count($text);$i++){ $box = imagettfbbox ($size, $angle, $font, $text[$i]); $x = $width/2 - abs($box[4] - $box[0])/2; $y = ($height/2 + abs($box[5] - $box[1])/2) + $offset*$i; imagettftext($img, $size, $angle, $x, $y, $c, $font, $text[$i]); } return $img; } $allFilenames = glob($sourcePath . '*.jpg'); $countFiles = count($allFilenames); for($i=0;$i<$countFiles;$i++){ $img = imagecreatefromjpeg($allFilenames[$i]); $image = addWatermark($img, $arrText, $fontPath, 72, 72, 72, 60); imageJPEG($image, $outputPath . basename($allFilenames[$i])); imagedestroy($image); } $_SESSION['text'] = $arrText; header('Location: /watermark/?result=success'); }
Код максимально снабжен комментариями, что сделает его понимание более простым.
Внимание. Для правильной работы необходимо добавить шрифт в папку fonts и изменить его имя в переменной $fontPath. В папку source необходимо добавить хотя бы одно исходное изображение (учитываются только файлы с расширением JPG).
Еще одна пометка — все файлы я располагал в отдельной папке watermark. Если будите менять папку, то следует учитывать пути в коде.
Таким образом, за короткий промежуток времени набросал небольшой полезный скрипт, который сэкономит время при создании водяного знака в несколько строк.
Конечно, вы можете изменить скрипт под свои нужды или доработать его так как вам необходимо.
Спасибо за внимание. Если возникли вопросы, пишите.