Как сделать изображение водяного знака с помощью PHP и GD, как предварительное изображение envato photodune?

Я хотел бы создать водяной знак с PHP и библиотекой GD.

Я хотел бы сделать повторение логотип водяного знака с автоматическим полем (пробел) между каждым повторяющимся логотипом, а также зигзагообразным положением.

Можно ли создать пунктирная линия водяного знака что связывает каждый логотип водяного знака?

Результат будет таким:


Я закончил зигзаг, используя функцию цикла и нечетное четное предложение.

/*
* utils
$widthWatermark = imagesx($logo);
$heightWatermark = imagesy($logo);
$widthPhoto = imagesx($output);
$heightPhoto = imagesy($output);
*/

// $xLogoPosition = 0;
// $yLogoPosition = 0;


$__xRepeat = ceil($widthPhoto / $widthWatermark);
$__yRepeat = ceil($heightPhoto / $heightWatermark);
$margin = (int)self::$option['margin'];

for ($i = 0; $i <= $__xRepeat; $i++) {

if ($i % 2 === 0) {
$pre_ii = 1;
} else {
$pre_ii = 0;
}

for ($ii = 0; $ii <= $__yRepeat; $ii++) {

$ii_zero = $ii - $pre_ii;

if ($ii_zero % 2 === 0) {
$y_xindent = $widthWatermark;
}else{
$y_xindent = 0;
}

$this->imagecopymerge_alpha($output, $logo, ($xLogoPosition + $widthWatermark * $i + $y_xindent), ($yLogoPosition + $widthWatermark * $ii), 0, 0, ImageSX($logo), ImageSY($logo), self::$option['opacity']);
}
}

Теперь я застрял в том, как создать пунктирную линию, имеющую диагональную позицию, которая соединяет друг с другом логотип.

У меня есть подсказка от http://php.net/manual/en/function.imagedashedline.php
но я не знаю, как использовать и комбинировать его с моим предыдущим кодом, который генерирует зигзагообразный логотип

1

Решение

редактировать

Оказывается, что PHP / GD на самом деле имеет функцию — imagesettile() — специально для решения этой ситуации.

Я изменил свой оригинальный ответ, чтобы учесть это:

<?php
// create php image of a 'dashed cross'.
$crossW = $crossH = 200;
$cross  = imagecreatetruecolor($crossW, $crossH);
imagefill($cross, 0, 0, 0x7fff00ff); // transparent magenta.
imagesetthickness($cross, 1);
imagesetstyle(
$cross,
array_merge(
array_fill(0, 3, 0x7fff00ff), // transparent magenta.
array_fill(0, 8, 0x60ffffff) // partially-transparent white.
)
);
imageline($cross, 0, 0, $crossW, $crossH, IMG_COLOR_STYLED);
imageline($cross, $crossW, 0, 0, $crossH, IMG_COLOR_STYLED);

$imageFile = 'wm2.jpg';

// open the image file to be watermarked and store its height and width.
$image = imagecreatefromjpeg($imageFile);
$imWidth = imagesx($image);
$imHeight = imagesy($image);

// apply the cross pattern as a tile to the image file.
imagesettile($image, $cross);
imagefilledrectangle($image, 0, 0, $imWidth, $imHeight, IMG_COLOR_TILED);

header('Content-type: image/png');
imagepng($image);
imagedestroy($cross);
imagedestroy($image);
exit;

Входные данные:

введите описание изображения здесь

Результат:

введите описание изображения здесь

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]