PHP imagettftext всегда рисует черный - PullRequest
3 голосов
/ 20 декабря 2010

Обычно, когда я рисую текст, он становится черным, как этот: 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);

Раньше он работал, но потом просто остановился, и я понятия не имею, почему.Это было после того, как я изменил исходное изображение (генерировал нормально), и я не коснулся кода.Я перепробовал все что угодно с изменением цвета, но не могу отобразить его ни в чем другом, кроме черного.

Ответы [ 3 ]

3 голосов
/ 20 декабря 2010

Вы проверили, возвращает ли функция 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(), посмотрите, поможет ли это.

1 голос
/ 20 декабря 2010

Исправлено, изменив imagecolorallocate на imagecolorclosest, так как у меня уже есть белый текст на логотипе, в который я копирую.

0 голосов
/ 13 сентября 2016

Используйте imagecreatetruecolor () , чтобы выделить цвет:

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

Это сработало для меня.

...