Водяной знак под картинкой (стиль 9gag.com) - PullRequest
0 голосов
/ 18 марта 2012

Я хочу сделать водяной знак как на этом сайте: http://9gag.com

Главное - поместить полосу под изображением, а не размещать ее на картинке. Я хочу сделать это, используя PHP с библиотеками GD. Любая помощь будет оценена, лучше всего будет пример кода или готов к использованию:)

Привет!

Ответы [ 2 ]

8 голосов
/ 18 марта 2012

Создайте изображение на x пикселей выше, скопируйте исходное изображение в него в позиции (0,0), а затем водяной знак в позиции (0,original_height):

$image = 'foo.jpg';
$watermark = 'watermark.png';
$imagesize = getimagesize($image);
$watermarksize = getimagesize($watermark);
$img = imagecreatetruecolor($imagesize[0], $imagesize[1] + $watermarksize[1]);
imagecopy($img, imagecreatefromjpeg($image), 0, 0, 0, 0, $imagesize[0], $imagesize[1]);
imagecopy($img, imagecreatefrompng($watermark), 0, $imagesize[1], 0, 0, $watermarksize[0], $watermarksize[1]);
imagejpeg($img);

Не проверено, но должно работать так. Код предполагает, что водяной знак не шире исходного изображения.

1 голос
/ 18 марта 2012

Не так просто, если вы хотите, чтобы это выглядело хорошо.

Для нижней полосы требуется 3 фрагмента, то есть слева, в середине и справа для нижней полосы. Рекомендуется, чтобы все 3 куска имели одинаковую высоту.

Here you go

Использование

imagecreatetruecolor(imagesx($original_picture), imagesy($original_picture)+$stripe_height);

Тогда:

  • Левая сторона imagecopymerge(...)
  • Правая сторона равна imagecopymerge(...), но вам нужно вычислить пункт назначения x, вычитая ширину правого фрагмента из ширины входного изображения
  • Между левым и правым (опять же, сделайте математику, это просто) используйте imagecopyresize(...), чтобы добавить средний кусок. Используйте эту функцию, чтобы убедиться, что она линейно масштабируется между левой и правой частями.
...