Здравствуйте!
Помогите решить задачу - нужно на изображения из определённой папки наложить водяной знак.

Сами изображения получаю из директории и обхожу циклом вот так:

$files = File::allFiles($directory);

foreach ($files as $file) {
    if ($file->getExtension() == 'jpg' || $file->getExtension() == 'png' || $file->getExtension() == 'webp') {
        if ( $file->getPath() === $directory ) {
            // вот тут нужно наложить на изображение водяной знак
        }
    }
}

В ядре Октября я не нашёл возможности наложить водяной знак. Теперь даже не знаю с какой стороны подойти к решению задачи.

  • reazzon ответили на это сообщение.

    Koresh Пользуйся пакетом Intrevention Image http://image.intervention.io/

    Вот как я накладывал ватермарку на изображение:

    $img = Image::make($path); // $path = путь до картинки
    
    // Ставлю текст 'Watermark text' в центре изображения
    $img->text('Watermark text', $img->width() / 2, $img->height() / 2, function($font){
        $font->file(storage_path('app/Roboto-Regular.ttf')); // Шрифт для текста
        $font->size(30); // Размер текста
        $font->color(array(0, 0, 0, 0.5)); // Цвет текста
        $font->align('center'); // Выравнивание текста
        $font->valign('top'); // Верт. выравнивание текста
    });
    
    // $pathToSave = строка с путем для сохранения изображения
    Storage::put($pathToSave, $img->encode('png', 100)); 

    В документации Intervention есть пример как установить ватермарку не текстом а картинкой. Там легко

      reazzon Пользуйся пакетом Intrevention Image

      А можете подсказать как правильно установить эту библиотеку в плагин Октября?
      Что именно нужно скачивать, весь репозиторий или только то что в папке src ?
      И по структуре, куда положить скачанный пакет? - У меня свой отдельный плагин, куда правильно в него положить всё это?

      • reazzon ответили на это сообщение.

        Не пойму где запускать команду композера для установки этого пакета, в корне сайта или в корне своего плагина?

        Koresh Нужно запустить команду композера в корне сайта, и зайдя в config/app.php в параметр providers добавить Intervention\Image\ImageServiceProvider::class

        И все. Можешь пользоваться пакетом, вызвав в любом файле своего плагина:

        use Intervention\Image\ImageManagerStatic as Image;
        • Koresh ответили на это сообщение.
        • ESt оценил это.

          reazzon Спасибо! Получилось, правда пока у меня криво работает, но думаю это уже поправимо.
          Я вот что хотел спросить, в коде есть вот такая строчка:

          $font->file(storage_path('app/Roboto-Regular.ttf'));

          Это шрифт в папке storage/app/. А как правильно устанавливать шрифт? Просто скачать и положить туда в папку или ставить через композер или что другое?

          У меня кривость как раз из за того что шрифта нет никакого.

          • superoleg ответили на это сообщение.

            Koresh просто положить в папку) Но думаю, ты и так догадался =)

            • Koresh ответили на это сообщение.

              superoleg просто положить в папку) Но думаю, ты и так догадался =)

              Нет, не догадался. Я пробовал со шрифтом - у меня не зашло. Ошибка вылетала что нужно указывать цифры, а не путь, типа так:.

              $font->file(5);

              Там в доках сказано что по дефолту есть шрифты, устанавливаются значениями от 1 до 5.
              Вот когда указывал цифру - всё отрабатывало. Но использовать текст со шрифтом - решение не очень.

              Задачу решил наложением сверху .png с водяным знаком. Это лучше и практичней чем текст.

              Intrevention Image хорошая библиотека. Печатает отлично.
              У меня две заготовки для водяного знака:

              Одна для портретной ориентации, вторая для альбомной.

              Небольшая логика в коде и на выходе получается такое:


              2 месяца спустя

              Не пойму почему после обновления на 471 сборку всё ломается.
              Пришлось в config/app.php закомментировать Intervention\Image\ImageServiceProvider::class и поотключать юзы.
              Не знаете как это исправить?

              • reazzon ответили на это сообщение.

                Koresh Скорее всего vendor папка обновилась и удалился твой Intervention. Попробуй выполнить composer install заново

                6 месяцев спустя

                reazzon Приветствую, я в Octobercms новичек, встала так же задача вставить watermark в плагин собранный на bilder, установил саму библиотеку, поправил app/image.php, как я понял в модели плагина вызвать
                use Intervention\Image\ImageManagerStatic as Image;
                а вот куда сам код прописать как в вашем примере?
                `$img = Image::make($path); // $path = путь до картинки

                // Ставлю текст ‘Watermark text’ в центре изображения
                $img->text(‘Watermark text’, $img->width() / 2, $img->height() / 2, function($font){
                $font->file(storage_path(‘app/Roboto-Regular.ttf’)); // Шрифт для текста
                $font->size(30); // Размер текста
                $font->color(array(0, 0, 0, 0.5)); // Цвет текста
                $font->align(‘center’); // Выравнивание текста
                $font->valign(‘top’); // Верт. выравнивание текста
                });

                // $pathToSave = строка с путем для сохранения изображения
                Storage::put($pathToSave, $img->encode(‘png’, 100)); `