【问题标题】:PHP imagettftext always drawing blackPHP imagettftext总是画黑
【发布时间】:2010-12-20 13:58:59
【问题描述】:

基本上,当我绘制文本时,它会变成这样的黑色:http://i.stack.imgur.com/z675F.png 而不是我在 PHP 和函数中分配的颜色。 代码:

    $finalImage = imagecreatefrompng($imageFile);
    $logo = imagecreatefrompng($logoImage);
    imagecopy($finalImage, $logo, $logoPosition['x'], $logoPosition['y'], 0, 0, imagesx($logo), imagesy($logo));
    $font = "arial.ttf";
    $fontSize = 10;
    $yOffSet = 15;
    $white = imagecolorallocate($finalImage, 255, 255, 255);
    foreach($pixelArray as $key => $x) {
        foreach($valueArray[$key] as $valueText) {

            imagettftext($finalImage, $fontSize, 0, $x, $yOffSet, $white, $font, $valueText);
            $yOffSet += 15;
        }
        $yOffSet = 15;
    }
    if($miscText != null) {
        foreach($miscText as $key => $text) {
            imagettftext($finalImage, $fontSize, 0, $text['x'], $text['y'], $white, $font, $text['text']);    
        }
    }
    imagepng($finalImage,$saveFileName.".png");
    imagedestroy($finalImage);

它以前可以工作,但后来就停止了,我不知道为什么。那是在我更改了源图像(生成良好)并且我没有触及代码之后。我已经尝试了各种改变颜色的方法,但我无法让它以黑色以外的任何方式显示。

【问题讨论】:

    标签: php gd imagettftext


    【解决方案1】:

    通过将 imagecolorallocate 更改为 imagecolorclosest 来修复它,因为我已经在我复制的徽标上添加了一些白色文字:

    //       imagecolorallocate....
    $white = imagecolorclosest($im, 255, 255, 255); 
    

    【讨论】:

      【解决方案2】:

      您是否检查过 imagecolorallocate() 函数是否返回布尔值 false,就像分配失败时一样?如果 $finalImage .png 为 8 位,并且您的纯白色不在源图像的调色板中,则此调用将失败。您确实说您更改了源图像,所以这很可能是它现在损坏的原因。

      $white = imagecolorallocate($finalImage, 255, 255, 255);
      if ($white === FALSE) { // note the === -> strict type comparison
          die("Failed to allocate color 255/255/255")
      }
      

      该函数还将简单地返回一个表示颜色三元组的数字,在本例中为 0xFFFFFF。您可以尝试将其直接传递给imagegetttftext() 调用,看看是否有帮助。

      【讨论】:

      • 我确实尝试使用 0xFFFFFF 并且它只是阻止了文本完全显示。我没有想到要检查分配限制,所以我会检查一下。我也很确定这不是图像,我尝试再次将背景涂成黑色,但仍然存在问题。好的,是的,它无法分配。我有一个我写到包含白色文本的图像的标志,它显示正确。有什么办法可以用那个白色的吗?
      • 如果调色板已满,并且尚未包含纯白色,那么您必须 imagecolordeallocate()(删除)其中一种现有颜色来为纯白色腾出一个插槽。
      【解决方案3】:

      使用 imagecreatetruecolor() 分配颜色:

      $width = 500; //whatever width you need
      $height = 200; //whatever height you need
      $white = imagecolorallocate(imagecreatetruecolor($width, $height), 255, 255, 255);
      

      这对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        • 2014-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多