为文本背景PHP和GD绘制颜色

为文本背景PHP和GD绘制颜色,php,background,gd,background-color,Php,Background,Gd,Background Color,我遇到了GD和PHP的另一个问题 我正在成功地将文本写入图像。 然而,我遇到过这样一种情况:将文本(而不是直接放在图像上)放在矩形(或任何形状)上,为文本创建一个坚实的背景,而放置文本的图像可能不允许文本很容易阅读 我的两个想法是,按优先顺序排列: 在书写文本时用颜色填充背景 将文本写入具有坚实背景的适当大小的图像,然后将图像覆盖到目标上 我不知道怎么做#1和#2看起来太复杂了和我不知道如何确定文本的尺寸以便为其创建新图像 为清楚起见,以下是不太好的输出: 下面是我希望它的外观,任何颜色的文本

我遇到了GD和PHP的另一个问题

我正在成功地将文本写入图像。
然而,我遇到过这样一种情况:将文本(而不是直接放在图像上)放在矩形(或任何形状)上,为文本创建一个坚实的背景,而放置文本的图像可能不允许文本很容易阅读

我的两个想法是,按优先顺序排列:

  • 在书写文本时用颜色填充背景
  • 将文本写入具有坚实背景的适当大小的图像,然后将图像覆盖到目标上
  • 我不知道怎么做#1和#2看起来太复杂了和我不知道如何确定文本的尺寸以便为其创建新图像

    为清楚起见,以下是不太好的输出:

    下面是我希望它的外观,任何颜色的文本后面都有一个紧凑的方框:

    我愿意接受任何建议,但在没有任何其他图像或粗糙的情况下快速绘制颜色显然是我的首选

    更新: 在@Dan建议使用之后,我决定是时候在我的库中添加对该函数的支持了。除了一个主要问题外,一切都如预期的那样运转

    写入图像的文本仍然是透明的,即使写入到固体背景(0透明度)

    下面是我为测试而编写的脚本:

    <?php
        set_include_path('backbone:global:jquery');
    
        require_once('Image.php');
    
        $scout = new Image();
        $scout->source = "scout.jpg";
    
        $result = $scout->Write->Font(25, 25, "A Fairly Long String", 12, "#FF0000", 0, "LiberationSans-Regular.ttf", 1, "#FFFF00", .4, 4);
    
        if( !isset($_GET['dev']) )
        {
            header("Content-Type: " . $scout->contentType());
        }
    
        if( $result )
        {
            $scout->output();
        }
    ?>
    
    
    
    我使用/需要的文件:
    1.
    2.
    3.图像处理库
    -
    -
    -
    -
    -
    -

    我对所有的文件表示歉意,它实际上只使用了
    Image
    ImageBase
    ImageCombine
    、和
    ImageWrite
    ,但是其他的都是
    需要加载程序加载一次

    下面是上述脚本的输出示例:

    以下是零透明度(完全不透明)的输出:

    $result=$scout->Write->Font(25,25,“相当长的字符串”、12、“#FF0000”、0、“自由无规则.ttf”、1、“#ffffff00”、1,4)


    你知道这是什么原因吗?这很可能是我的代码,但奇怪的是,除了这一个bug之外,它会完全按照我的想法工作。

    如果您切换到ttf,这可能会帮您完成工作

    在拼命寻找这个问题的答案时,我无意中发现了与我的问题无关的答案,并且包含了答案

    我从来没有完全理解为什么你在想要透明的时候告诉
    false
    ,所以我想我没有正确理解我使用的代码导致了这个问题

    在任何情况下,以下修改的代码在我的单个测试用例中都像一个符咒一样工作。 要在不强制100%透明度的情况下将文本写入背景中,必须在写入文本时启用alpha blending

    imagealphablending($text->handle, true);
    $bool = imagettftext($text->handle, $textSize, $angle, $padding, abs($size[5]) + $padding, $this->AllocateColor($rgba[0]['r'], $rgba[0]['g'], $rgba[0]['b'], $rgba[0]['alpha']), $font, $string);
    imagealphablending($text->handle, false);
    

    您使用什么功能将文本写入图像?使用ttf是一种选择吗?@Dan这当然是一种选择,尽管只是为了方便地设置一些东西,我一直在使用默认值和。顺便说一句,我正在使用我写的东西。我以前在调整图像大小时见过类似的东西。是否涉及任何尺寸调整?没有任何尺寸调整。它本质上是:1)加载Scout,2)生成与文本大小相同的新图像,3)写入文本,4)将文本覆盖到Scout图像,5)显示组合图像。这有点让我生气:-/我希望GD不要那么挑剔。