我正在尝试使用Silverstripe 3.0 Framework生成并将图像返回到模板,并且遇到了一些问题。
我将其返回到浏览器中的变量如下:
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()类?
答案 0 :(得分: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"/>';
}