我正在使用此代码
从文本中创建Core PHP中的图像header ("Content-type: image/png");
$text='test@example.com';
$string = $text;
$font = 3;
$width = ImageFontWidth($font) * strlen($string);
$height = ImageFontHeight($font);
$im = @imagecreate ($width,$height);
$background_color = imagecolorallocate ($im, 255, 255, 255); //white background
$text_color = imagecolorallocate ($im, 0, 0,0);//black text
imagestring ($im, $font, 0, 0, $string, $text_color);
echo imagepng ($im);
上面的代码工作正常在核心PHP文件中,但现在我正在研究laravel框架中的项目。我对laravel来说是全新的。当我在laravel中尝试相同的代码时,它不起作用。我尝试更改响应方法但仍然失败 这是我尝试过的。
public function imgCreate(){
header ("Content-type: image/png");
$text='test@example.com';
$string = $text;
$font = 3;
$width = ImageFontWidth($font) * strlen($string);
$height = ImageFontHeight($font);
$im = @imagecreate ($width,$height);
$background_color = imagecolorallocate ($im, 255, 255, 255); //white background
$text_color = imagecolorallocate ($im, 0, 0,0);//black text
imagestring ($im, $font, 0, 0, $string, $text_color);
echo imagepng($im);
//return response($im)->withHeaders(['Content-type'=>'image/png']);
}
所以基本上,我在控制器函数(imgCreate)中粘贴了相同的代码。我尝试了不同的响应方法似乎都有错误 当我像这样回来时
//echo imagepng($im);
return response($im)->withHeaders(['Content-type'=>'image/png']);
它会抛出错误 “Response内容必须是实现__toString()的字符串或对象,”resource“。”
当我尝试通过
的简单方法时echo imagepng($im);
//return response($im)->withHeaders(['Content-type'=>'image/png']);
我得到一个不可读的字符串: -
“ PNGIHDRpK xPLTE U ~ IDAT c0S �� ��q��������67?>�/�Ð8ۘ��f��3�%Hn�cH���}����H� �riggc�0Ncȝm�qss��ǒ%7�1X||x����l����ripW400#; �^10��
IEND B` 1”
是否可以在laravel中创建图像?或者我做错了什么? 据我说,问题似乎是标题“内容类型”,它负责以图像的形式返回结果。
先谢谢!!!!!
答案 0 :(得分:2)
您可以通过将图片编码为base_64
$text='test@example.com';
$string = $text;
$font = 3;
$width = ImageFontWidth($font) * strlen($string);
$height = ImageFontHeight($font);
$im = @imagecreate ($width,$height);
$background_color = imagecolorallocate ($im, 255, 255, 255); //white background
$text_color = imagecolorallocate ($im, 0, 0,0);//black text
imagestring ($im, $font, 0, 0, $string, $text_color);
ob_start();
imagepng($im);
$imstr = base64_encode(ob_get_clean());
imagedestroy($im);
return view('index',array('data'=>$imstr));
并在视图中查看图片
<img src="data:image/png;base64,{{ $data }}"/>
答案 1 :(得分:0)
运行隔离时,您的代码似乎有效。我假设laravel在输出之前发送自定义标头或向输出添加内容。两者都可能使你的形象失败。
解决您的问题:找出浏览器端的内容类型和/或找出laravel是否输出其他内容。例如html代码。