使用PHP GD`imagecreatefromstring`函数创建图像的问题

时间:2012-11-24 09:47:53

标签: php curl php-gd

我有一个简单的服务,使用通过URL传递的参数生成任何文本的PNG图像。其中一个参数是文本本身,其余的是'font','color','font weight'等等。

此类网址的一个示例是: http://picselbocs.com/projects/cakemyface/text.php?params=Verdana%7C18%7Cbold%7Cnormal%7Ccenter%7C%23cc0000%7Cunderline&text=Hello%20world!

生成以下PNG:

original

在另一个脚本中,我正在使用cURL检索此服务生成的此类资源,然后使用imagecreatefromstring()将其转换为图像,因为我需要对其进行操作 - 例如旋转和缩放 - ,然后将其与其他一些图像合并。 为此,我使用以下代码:

function getImage($url){
            $ch = curl_init ($url);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
            $resource = curl_exec($ch);
            curl_close ($ch);

            return $resource;
    }


    $url = "http://picselbocs.com/projects/cakemyface/text.php?params=Verdana%7C18%7Cbold%7Cnormal%7Ccenter%7C%23cc0000%7Cunderline&text=Hello%20world!";

    $string = getImage($url);
    $image = imagecreatefromstring($string);

    // Send the image to the client
    header("Content-type: image/png");
    header("Content-disposition: inline; filename=mytext.png");
    imagepng($image);
    imagedestroy($image);

此代码可用 here ,您可以在其中查看输出。 问题是上面的代码输出了一些奇怪的PNG,其中所有的字母都是填充的矩形,如下例所示:

sample result

为什么会发生这种情况,我该如何解决?

另一个奇怪的事情是,如果我将URL替换为文本图像,例如,使用Google Charts工具生成的QR码链接(例如QR code),结果就是它的结果应该是......

1 个答案:

答案 0 :(得分:3)

经过一番游戏,我发现了问题和解决方案!

$image = imagecreatefromstring(file_get_contents('http://picselbocs.com/projects/cakemyface/text.php?params=Verdana|18|bold|normal|center|%23cc0000|underline&text=Hello%20world!'));
imagesavealpha($image, TRUE); // this is the fix
header("Content-Type: image/png");
imagepng($image);

我创建图像的方式只是一种不使用卷曲的快速方式,似乎图像需要它的alpha通道保存。