PHP创建的Text不应该有颜色

时间:2012-08-20 19:47:09

标签: php image colors png

使用 imagettftext 创建的文本确实具有完整的其他颜色,因为它应该具有(主要是插入图png图的颜色)。 为什么不采取颜色? 它必须是函数 resizePictureAndPlaceOnSign 中的某些内容,因为如果我将其注释掉,那就完美了。

    public function resizePictureAndPlaceOnSign($filename, $new_width,  $dst_x, $dst_y){

        // create figure in memory
        $figure = imagecreatefrompng($filename);


        /* 
            CALC RATIO
        */
        list($width, $height) = getimagesize($filename);

        $vh = ($height/$width);
        $new_height = $vh*$new_width;
        $rnd_new_height = round($new_height, 0); 
        /*  
        */


        // make the figure smaller
        imagecopyresampled($this->picture, $figure, $dst_x, $dst_y, 0, 0, $new_width, $new_height, $width, $height);

        imagedestroy($figure);

    }
    public function drawPicture()
    { 
       // $zufall = rand(1,999);


        // create picture
        $schild_leere_vorlage = imagecreatefrompng("schild_vorlage.png");
        $this->picture = imagecreate(600,192);


        // copy the image into the other image
        # int ImageCopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )
        imagecopy($this->picture, $schild_leere_vorlage, 0, 0, 0, 0, 600, 192);


            $filename = "figures/" . $_GET['figure'] . ".png";

            /*********************/
            $this->resizePictureAndPlaceOnSign($filename, 100, 25, 25);


        // create colors
        $color = 0x00000000FF;
        $color =  imagecolorallocate ($this->picture, 0, 0, 255);

        // create text
        imagettftext($this->picture, $this->fontSize , 0, 125, 100,$color , "cooperm.TTF", $this->name);


        // header("Content-Type: image/jpeg");

        imagepng($this->picture);


        //$this->checkFontSize();

        imagedestroy($this->picture);

    }
}

2 个答案:

答案 0 :(得分:1)

您正在创建调色板图像。当您复制其他图像时,您正在使用所有可用颜色,因此imagecolorallocate失败并将$color设置为false。

要解决此问题,请在真彩色图像上进行合成。

$this->picture = imagecreatetruecolor(600,192);

如果出于某种原因需要调整输出,可以使用imagetruecolortopalette()进行转换。

答案 1 :(得分:1)

你可以尝试

$color =  imagecolorclosest ($this->picture, 0, 0, 255);

你仍然不会完全纯蓝色,因为mcrumley解释的原因,但它可能“足够接近”。