4

基本的に、テキストを描画すると、次のように黒くなります: 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);

以前は機能していましたが、停止しただけで、理由がわかりません。ソース画像を変更した後(正常に生成されていた)、コードに触れていませんでした。色を変えていろいろ試してみたのですが、黒以外で表示することができません。

4

3 に答える 3

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

この関数はまた、単純に 3 色を表す数値を返します。この場合は 0xFFFFFF になります。imagegetttftext()それを呼び出しに直接渡してみてください。それが役立つかどうかを確認してください。

于 2010-12-20T14:11:05.153 に答える
2

コピーしたロゴにすでに白いテキストがあるため、次のように変更imagecolorallocateして修正しました。imagecolorclosest

//       imagecolorallocate....
$white = imagecolorclosest($im, 255, 255, 255); 
于 2010-12-20T14:20:48.757 に答える
0

imagecreatetruecolor()を使用して色を割り当てます。

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

それは私のために働いた。

于 2016-09-13T11:59:54.977 に答える