- Saved searches
- Use saved searches to filter your results more quickly
- License
- ajaxray/php-watermark
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- Добавление водяного знака на фото средствами PHP
- 5 последних уроков рубрики «PHP»
- Фильтрация данных с помощью zend-filter
- Контекстное экранирование с помощью zend-escaper
- Подключение Zend модулей к Expressive
- Совет: отправка информации в Google Analytics через API
- Подборка PHP песочниц
- PHP. Наложение водяного знака.
- Стандартные функции
- Наложение знака при загрузке — функция
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Add text or image Watermark on image and PDF files
License
ajaxray/php-watermark
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Add text or image Watermark on image and PDF using PHP and ImageMagick.
PHP ImageMagick extension is not required.
Add as a dependency with composer
$ composer require ajaxray/php-watermark
Or download latest version as a Zip file.
$ composer require ajaxray/php-watermark:v0.1.2
Also you should check older readme file for PHP version
// Initiate with source image or pdf $watermark = new Watermark('/path/to/source.jpg'); // Customize some options (See list of supported options below) $watermark->withText('ajaxray.com') ->setFontSize(48) ->setRotate(30) ->setOpacity(.4) ->write('path/to/output.jpg'); // Watermark with Image $watermark->withImage('path/to/logo.png') ->setPosition(Watermark::POSITION_BOTTOM_RIGHT) ->setStyle(Watermark::STYLE_IMG_DISSOLVE) ->write('path/to/output.jpg');
If output file name is skipped for Watermark::write() function, the source file will be overridden.
The table below shows customization options and their support matrix. Listed functions should be called on an object of Ajaxray\PHPWatermark\Watermark . Checkmark column titles means the following —
- Txt-Img: Watermarking with text on Image (sample, sample-tiled)
- Img-Img: Watermarking with Image on Image (sample)
- Txt-PDF: Watermarking with text on PDF (sample)
- Img-PDF: Watermarking with Image on PDF (sample)
Function | Value | Txt-Img | Img-Img | Txt-PDF | Img-PDF |
---|---|---|---|---|---|
setFont(‘Arial’) | string; Font Name | ✅ | ✅ | ||
setFontSize(36) | int; Font size | ✅ | ✅ | ||
setOpacity(.4) | float; between 0 (opaque) to 1 (transparent) | ✅ | ✅ | ✅ | ✅ |
setRotate(245) | int; between 0 to 360 | ✅ | ✅ | ||
setPosition($position) | int; One of Watermark::POSITION_* constants | ✅ | ✅ | ✅ | ✅ |
setOffset(50, 100) | int, int; X and Y offset relative to position | ✅ | ✅ | ✅ | ✅ |
setStyle($style) | int; One of Watermark::STYLE_* constants | ⌛ | ✅ | ⌛ | ⌛ |
setTiled() | boolean; (default true ) | ✅ | ✅ | ⌛ | ⌛ |
setTileSize(200, 150) | int, int; Width and Height of each tile | ✅ | ⌛ |
BTW, all the samples linked above are the results of these examples. You may generate them yourself just by running example scripts from command line —
$ php vendor/ajaxray/php-watermark/examples/example_img.php $ php vendor/ajaxray/php-watermark/examples/example_pdf.php
Then you should get the result files in vendor/ajaxray/php-watermark/examples/img and vendor/ajaxray/php-watermark/examples/pdf directories.
Something unexpected? Debug! 🐞 🔫
If anything unexpected happened, try to debug the issue.
- First step is to check if PHP is configured to display errors. Alternatively you may add these lines at the top of your script.
ini_set('display_errors', 1); error_reporting(E_ALL);
- The file path mentioned in the second argument of Watermark::withText() and Watermark::withImage() methods.
- Parent of the source file itself if no separate destination mentioned in above methods.
- To see the list of supported font names in your system, run convert -list font on command prompt
- Remember to set appropriate output file extension (e,g, .pdf for pdf files)
- If possible, use absolute path for files to avoid various mistakes.
- STYLE_IMG_* constants are for Image watermarks and Watermark::STYLE_TEXT_* are for text.
- Default text style ( Watermark::STYLE_TEXT_BEVEL ) is expected to be visible on any background. Use other text styles only on selective backgrounds.
- UnitTest are executed and all green against PHP 5.6 and PHP 7.1 using PHPUnit 5.7.5
- I’v tested all intended functionality with ImageMagick 7.0.4-6 Q16 x86_64 and GPL Ghostscript 9.20 installed.
Important Update for PDF watermarking:
When using the imagemagick + ghostscript extraction and joining pdf pages, it has a few drawbacks including file-size issue. Many developers were asking for a solution about the file size and PDF quality since releasing of this library. So, I’ve created a command line tool for PDF watermarking that will work without converting pages into images. As a result, you’ll get better PDF quality and dramatically smaller file size.
Please note that, it’s not a PHP library. So you’ve to use it using exec, shell_exec or Symfony Process Component.
«This is the Book about which there is no doubt, a guidance for those conscious of Allah» — Al-Quran
Добавление водяного знака на фото средствами PHP
Если вы хотите добавить водяной знак на фото, не заморачиваясь с графическими редакторами или добавлять его во время загрузки фоток на сервер, то это урок для вас.
В этом уроке я покажу вам как добавить водяной знак на изображение на лету, фактически не изменяя исходное изображение. В первую очередь, вам понадобится изображение, которое вы будете использовать в качестве водяного знака.
Затем формируем заголовок файла:
// это строка сообщит браузеру что мы передаём jpg изображение header('content-type: image/jpeg');
Затем мы формируем png изображение и получаем его размеры:
// создание водяного знака в формате png $watermark = imagecreatefrompng('watermark.png'); // получаем ширину и высоту $watermark_width = imagesx($watermark); $watermark_height = imagesy($watermark);
То же самое сделаем и с оригинальным изображением, но только в формате jpg. Это обычное дело для фоток, которые загружаются через форму. Действуем следующим образом:
// создание jpg изображения $image_path = 'original.jpg'; $image = imagecreatefromjpeg($image_path); // получаем размерность изображения $size = getimagesize($image_path);
Теперь нам надо поместить водяной знак на изображение:
// помещаем водяной знак в нижней части справа. Делаем отступ в 5px $dest_x = $size[0] - $watermark_width - 5; $dest_y = $size[1] - $watermark_height - 5;
Затем настроим опции смешивания для обоих изображений:
imagealphablending($image, true); imagealphablending($watermark, true);
В конце концов мы создаём новое изображение используя параметры:
// создаём новое изображение imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagejpeg($image);
// освобождаем память imagedestroy($image); imagedestroy($watermark);
Для регулирования прозрачности водяного знака можно использовать Photoshop.
С теорией всё. Теперь применим наши знания в реальном проекте. Всё это необходимо сохранить в файл. К примеру под названием watermark.php
header('content-type: image/jpeg'); // получаем имя изображения через GET $image = $_GET['image']; // создаём водяной знак $watermark = imagecreatefrompng('watermark.png'); // получаем значения высоты и ширины водяного знака $watermark_width = imagesx($watermark); $watermark_height = imagesy($watermark); // создаём jpg из оригинального изображения $image_path = '/path/to/image/folder/' . $image; $image = imagecreatefromjpeg($image_path); //если что-то пойдёт не так if ($image === false) < return false; >$size = getimagesize($image_path); // помещаем водяной знак на изображение $dest_x = $size[0] - $watermark_width - 5; $dest_y = $size[1] - $watermark_height - 5; imagealphablending($image, true); imagealphablending($watermark, true); // создаём новое изображение imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagejpeg($image); // освобождаем память imagedestroy($image); imagedestroy($watermark);
Теперь для того, чтобы показать фотку на которой будет водяной знак не изменяя исходное изображение, используйте следующий код:
Таким образом, мы передаём только имя изображения и получаем то что нам нужно, не изменяя исходное изображение.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.codeforest.net/add-watermark-on-image-using-php
Перевел: Станислав Протасевич
Урок создан: 26 Февраля 2011
Просмотров: 57779
Правила перепечатки
5 последних уроков рубрики «PHP»
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
PHP. Наложение водяного знака.
В продолжение темы загрузки изображений на сервер хотелось бы рассказать о такой достаточно частой задаче, как нанесение на картинку водяного знака.
Данную статью имеет смысл читать, если вы уже понимаете весь процесс загрузки изображений на сервер. Если же вы пока что слабо представляете, как это происходит, пожалуйста, обратите внимание на две базовые статьи.
За основу возьмём код, написанный в вышеуказанных статьях, и добавим в него необходимые элементы.
Стандартные функции
Для начала небольшая справка по тем стандартным функциям PHP, которые нам с вами придётся использовать:
- getimagesize – возвращает полезные данные об изображении. Нас будут интересовать ширина, высота и MIME-тип картинки.
- imagecreatefrom*** — одна из функций imagecreatefromjpeg, imagecreatefrompng и т.д. Вместо звёздочек мы будет подставлять MIME-тип загружаемого изображения. Результатом работы функции является представление картинки в памяти PHP.
- image*** — одна из функций imagejpeg, imagepng и т.д. Результатом работы функции является сохранённое изображение.
- imagecopy – функция для копирования изображения. Её мы будем использовать непосредственно для наложения одной картинки на другую.
Предупреждаю сразу, что с точки зрения количества кода процесс загрузки картинки сейчас сильно усложнится. Дело в том, что для работы с изображением нам сначала придётся создать его в памяти PHP, произвести все необходимые манипуляции и только затем сохранить в папку на сервере.
Наложение знака при загрузке — функция
Итак, вот во что превратится наша функция make_upload:
Первый момент, который может вызвать определённое непонимание, – это непривычная запись $im_cr_func($file[‘tmp_name’]). Что же это такое? На самом деле вместо $im_cr_func будет подставлено название функции, которую мы выбрали. Например, при загрузки jpg-картинки будет вызвана функция imagecreatefromjpeg.
После выполнения данного действия в переменной $img у нас хранится представление картинки в памяти PHP. Аналогичным образом заносим в переменную $watermark изображение водяного знака. Обратите внимание, что эта картинка лежит у нас в корне сайта.
Следующий важный шаг – расчёт правильных координат для наложения изображений. Тут схема классическая: половина разности ширин – это отступ слева, половина разности высот – отступ сверху. После этого с помощью функции imagecopy мы совмещаем оба изображения.
Ну, фактически всё! Теперь просто вызываем $im_save_func, куда передаём ссылку на совмещённое изображение и путь, по которому картинку нужно сохранить.
В итоге мы научились накладывать водяной знак на загружаемое изображение, а вскоре разберём изменение размера загружаемого изображения. Не пропустите!
Понравился материал? Поделись с друзьями!