可以同时使用 PHP GD 的 imagecreatefromgif() 和 imagettftext() 吗?

Possible to use PHP GD's imagecreatefromgif() and imagettftext() together?

提问人:Andrew G. Johnson 提问时间:11/3/2009 最后编辑:CommunityAndrew G. Johnson 更新时间:11/3/2009 访问量:1107

问:

基本上,我正在寻找一种在GIF之上编写动态文本的方法[最好通过PHP GD。但我似乎无法让这两个功能发挥得很好。

供参考:imagecreatefromgifimagettftext

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);
}
PHP GD

评论

1赞 Ewan Todd 11/3/2009
让我们看看你的代码。告诉我们您收到的错误消息。
1赞 Residuum 11/3/2009
“我似乎无法让这两个功能发挥良好”是什么意思?
0赞 Andrew G. Johnson 11/3/2009
如果你看一下我刚刚添加的代码示例,当我使用 imagecreatetruecolor() 定义$img时,我可以使用文本,但它是纯色背景色,但我使用的 imagecreatefromgif() 如果不允许文本。这意味着它是其中之一,因此玩得不好

答:

2赞 Meep3D 11/3/2009 #1

如果您创建一个新的真彩色图像,将 gif 导入其中,添加文本,然后再次将结果输出为 gif 会怎样 - 这样您可能会有更多的运气。

评论

0赞 Andrew G. Johnson 11/3/2009
您能否更深入地了解第 1 步和第 2 步,尤其是如何准确地将 GIF 导入真彩色图像。
0赞 Andrew G. Johnson 11/3/2009
我想我应该具体说明:我认为这是我需要做的,问题是如何
0赞 CodeJoust 11/3/2009 #2

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

0赞 Andrew G. Johnson 11/3/2009 #3

这是我最终所做的:

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);
}