0

我正在尝试使用 Silverstripe 3.0 框架生成图像并将其返回到模板,但遇到了一些问题。

我在一个变量中将它返回给浏览器,如下所示:

public function make_image(){

    $string = 'string';
    $im     = imagecreate(300,300);
    $orange = imagecolorallocate($im, 220, 210, 60);
    $px     = (imagesx($im) - 7.5 * strlen($string)) / 2;
    imagestring($im, 3, $px, 9, $string, $orange);
    imagepng($im);
    imagedestroy($im);

}

浏览器将其呈现为: �PNG IHDR,,C�6PLTE��<��*�"IDATh���1 �Om ?�x-��{�IEND�B`�

返回的标头是 text/html ,只有一个请求让我觉得那里发生了一些奇怪的事情。谁能帮我解决这个问题。

Silverstripe 使用 Image() 类可能实现这一点的另一种方法?

4

1 回答 1

2

我不太确定你为什么需要使用你的 http 标头。我了解您正在通过中间步骤生成图像,因此您需要看到它正在生成,但如果您的初始目标是生成图像以将其包含在模板中,这可能会有所帮助:

public function StringImage($string) {
    $filePath = ASSETS_PATH.'/'.$string.'.png';
    if (!file_exists(ASSETS_PATH.'/'.$string.'.png')){
        $stringFontSize = 11;
        $dimensions = imagettfbbox($stringFontSize, 90, 'Arial', $string);
        $gd = new GD();
        $width = $dimensions[2] - $dimensions[4];
        $height = $dimensions[7] - $dimensions[5];
        $image = imagecreatetruecolor($width, $height);
        imagefilledrectangle($image, 0, 0, $width, $height, 0xFFFFFF);
        imagettftext($image, $stringFontSize, 90, $width, $height, 0x000000, 'Arial', $string);
        $gd->setGD($image);
        $gd->writeTo($filePath);
    }
    return '<img src="'.ASSETS_DIR.'/'.$string.'.png'.'" alt="string"/>';
}
于 2013-03-24T23:33:24.620 回答