Генерация изображения с «позолоченным» текстовым эффектом с использованием PHP / GD - PullRequest
0 голосов
/ 13 апреля 2019

Я динамически генерирую изображение PNG, используя PHP 7.3 / GD на основе текста, предоставленного пользователем.

Все работает, как и ожидалось, но я бы хотел примените какой-нибудь фильтр / эффект, чтобы получить позолоченный стиль , например, ниже:

Gold-plated effect

Любая идея, как этого добиться?Я нашел решения, чтобы применить размытие / свечение / тень или решить эту проблему с помощью HTML5 / CSS3, но я должен использовать GD / PHP для этого проекта.

Вот мой текущий код:

<?php

putenv('GDFONTPATH='.realpath('.'));
header('Content-Type: image/png');
$im = imagecreatetruecolor(300, 200);
$bg = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $bg);
$gold = imagecolorallocate($im, 255, 215, 0);
imagettftext($im, 28, 0, 76, 110, $gold, 'HirukoBlackAlternate.ttf', 'Stack');
imagepng($im);
imagedestroy($im);

1 Ответ

2 голосов
/ 13 апреля 2019

Ну, я немного поигрался с этим и получил:

enter image description here

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

Я использовал imagelayereffect () так:

// start with your code
putenv('GDFONTPATH='.realpath('.'));
header('Content-Type: image/png');
$im = imagecreatetruecolor(300, 200);
$bg = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $bg);

// first the back drop 
$gray = imagecolorallocate($im, 80, 80, 80);
imagettftext($im, 28, 0, 76+3, 110+2, $gray, 'HirukoBlackAlternate.ttf', 'Stack');

// then the gold
$gold = imagecolorallocate($im, 180, 180, 150);
imagettftext($im, 28, 0, 76, 110, $gold, 'HirukoBlackAlternate.ttf', 'Stack');

// get a pattern image
$pattern = imagecreatefromjpeg('http://i.pinimg.com/736x/96/36/3c/96363c9337b2d1aad24323b1d9efda72--texture-metal-gold-texture.jpg');

// copy it in with a layer effect
imagelayereffect($im, IMG_EFFECT_OVERLAY);
imagecopyresampled($im, $pattern, 0, 0, 0, 0, 300, 200, 736, 552);

// output and forget
imagepng($im);
imagedestroy($im);
imagedestroy($pattern);

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

...