使用 PHP/GD 生成具有 "Gold-plated" 文字效果的图像
Generating an image with a "Gold-plated" text effect using PHP/GD
我正在根据用户提供的文本使用 PHP 7.3/GD 动态生成 PNG 图像。
一切正常,但我想应用某种filter/effect以获得镀金样式,如下所示:
知道如何实现吗?我找到了应用 blur/glow/shadow 或通过 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);
好吧,我试了一下,得到了这个:
它与示例图像不完全一样,但有点接近了。您需要 fiddle 多一点才能得到您想要的。
我确实是这样使用 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);
所以我基本上使用图像来获得金色光芒。似乎可行,但我认为这可以改进。
我正在根据用户提供的文本使用 PHP 7.3/GD 动态生成 PNG 图像。
一切正常,但我想应用某种filter/effect以获得镀金样式,如下所示:
知道如何实现吗?我找到了应用 blur/glow/shadow 或通过 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);
好吧,我试了一下,得到了这个:
它与示例图像不完全一样,但有点接近了。您需要 fiddle 多一点才能得到您想要的。
我确实是这样使用 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);
所以我基本上使用图像来获得金色光芒。似乎可行,但我认为这可以改进。