可以一起使用 PHP GD 的 imagecreatefromgif() 和 imagettftext() 吗?

发布于 2024-08-09 15:19:38 字数 1177 浏览 4 评论 0原文

基本上我正在寻找一种在 GIF 上编写动态文本的方法 [最好通过 PHP GD]。但我似乎无法让这两个函数很好地发挥作用。

供参考: imagecreatefromgif & imagettftext

function load_gif($imgname)
{
    $im = @imagecreatefromgif($imgname);

    if(!$im)
    {
        $im = imagecreatetruecolor(150,30);
        $bgc = imagecolorallocate($im,255,255,255);
        $tc = imagecolorallocate($im,0,0,0);

        imagefilledrectangle($im,0,0,150,30,$bgc);

        imagestring($im,1,5,5,'Error loading ' . $imgname,$tc);
    }

    return $im;
}

if ($_GET['color'] == 'red')
{
    header('Content-Type:image/gif');

    //$img = imagecreatetruecolor(51,32); // THIS IS NEEDED FOR TEXT TO SHOW
    $img = load_gif('map-bubble-' . $_GET['color'] . '.gif');

    $black = imagecolorallocate($img,0,0,0);
    $white = imagecolorallocate($img,255,255,255);

    imagefilledrectangle($img,0,0,51,32,$black);
    imagettftext($img,14,0,0,0,$white,'../arial.ttf','test');

    imagegif($img);

    imagedestroy($img);
}

Basically I am looking for a way to write dynamic text on top of a GIF [preferably via PHP GD.] But I can't seem to get these two functions to play nice.

For reference: imagecreatefromgif & imagettftext

function load_gif($imgname)
{
    $im = @imagecreatefromgif($imgname);

    if(!$im)
    {
        $im = imagecreatetruecolor(150,30);
        $bgc = imagecolorallocate($im,255,255,255);
        $tc = imagecolorallocate($im,0,0,0);

        imagefilledrectangle($im,0,0,150,30,$bgc);

        imagestring($im,1,5,5,'Error loading ' . $imgname,$tc);
    }

    return $im;
}

if ($_GET['color'] == 'red')
{
    header('Content-Type:image/gif');

    //$img = imagecreatetruecolor(51,32); // THIS IS NEEDED FOR TEXT TO SHOW
    $img = load_gif('map-bubble-' . $_GET['color'] . '.gif');

    $black = imagecolorallocate($img,0,0,0);
    $white = imagecolorallocate($img,255,255,255);

    imagefilledrectangle($img,0,0,51,32,$black);
    imagettftext($img,14,0,0,0,$white,'../arial.ttf','test');

    imagegif($img);

    imagedestroy($img);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

行至春深 2024-08-16 15:19:38

如果您创建一个新的真彩色图像,将 gif 导入其中,添加文本,然后再次将结果输出为 gif,那么您可能会更幸运。

What if you create a new truecolour image, import the gif into that, add the text, then output the result again as a gif - you may have more luck that way.

情痴 2024-08-16 15:19:38

只需将 imagecreatefromgif 存储到变量中,运行 imagettftext,然后使用内容类型标头输出图像即可。查看参数,并使用 imagecreatefromgif 的输出填充 $image 参数。

Simply store the imagecreatefromgif into a variable, run imagettftext, then output the image using an content-type header. Take a look at the arguments, and fill in the $image argument with the outptu from imagecreatefromgif.

岁吢 2024-08-16 15:19:38

这就是我最终所做的:

if ($_GET['color'] == 'red' && strlen($_GET['number']) > 0 && is_numeric($_GET['number']))
{
    $image = imagecreatefromgif('map-bubble-' . $_GET['color'] . '.gif');

    $image_width = imagesx($image);

    $text_size = @imagettfbbox(10,0,'../arial.ttf','
 . $_GET['number']);
    $text_width = abs($text_size[2]-$text_size[0]);

    imagettftext($image,10,0,($image_width / 2) - ($text_width / 2),17,imagecolorallocate($image,255,255,255),'../arial.ttf','
 . $_GET['number']);

    header('Content-type:image/gif');
    imagegif($image);

    imagedestroy($image);
}

Here's what I ended up doing:

if ($_GET['color'] == 'red' && strlen($_GET['number']) > 0 && is_numeric($_GET['number']))
{
    $image = imagecreatefromgif('map-bubble-' . $_GET['color'] . '.gif');

    $image_width = imagesx($image);

    $text_size = @imagettfbbox(10,0,'../arial.ttf','
 . $_GET['number']);
    $text_width = abs($text_size[2]-$text_size[0]);

    imagettftext($image,10,0,($image_width / 2) - ($text_width / 2),17,imagecolorallocate($image,255,255,255),'../arial.ttf','
 . $_GET['number']);

    header('Content-type:image/gif');
    imagegif($image);

    imagedestroy($image);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文