Сервис для нанесения водяного знака своими руками на 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. Если будите менять папку, то следует учитывать пути в коде.

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

Конечно, вы можете изменить скрипт под свои нужды или доработать его так как вам необходимо.

Спасибо за внимание. Если возникли вопросы, пишите.

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

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

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

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