2010-12-20 51 views
3

基本上当我绘制文本它结束了黑色这样的:http://i.stack.imgur.com/z675F.png 而是我在PHP和功能分配的颜色。 代码:PHP imagettftext总是绘制黑色

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

这是工作之前,但当时它只是停止,我不知道为什么。这是在我更改源图像(生成正常)后,我没有触及代码。我尝试了各种改变颜色的东西,但我无法让它显示在黑色以外的任何东西上。

回答

3

你检查,如果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()调用,看看是否有帮助。

+0

我曾尝试使用0xFFFFFF,它只是停止从完全显示的文本。我没有想到检查分配限制,所以我会检查。我也很确定这不是图像,我试图再次将背景涂成黑色,并且仍然存在问题。好的,是的,它没有分配。我给包含白色文字的图像写了一个标志,显示正确。有什么方法可以使用这种白色? – UberMouse 2010-12-20 14:15:22

+0

如果调色板的完整,并没有包含一个纯白色的,那么你就必须'imagecolordeallocate()'(删除)现有的颜色之一,以腾出纯白色的插槽。 – 2010-12-20 14:39:10

1

通过改变imagecolorallocate,因为我已经到imagecolorclosest上的标志我在复制一些白色文本固定它

0

使用imagecreatetruecolor()分配的颜色:

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

为我工作。