我已经创建了一个将文本叠加到图像上的功能,但是我正在摸索着找到一种输出图像的方式,可以在另一个脚本中使用它或输出到屏幕上。
我可以从php脚本中调用此函数,传递图像和要使用的文本,但是当函数返回数据时 - 由于标题而接管页面 - 我得到的所有输出都是图像。
我怀疑这是一个简单的问题,只是在我的PHP知识中显示了一个漏洞 - 有人能让我直接在这里吗?
谢谢!
function makeimage($ file,$ text){ ob_start(); $ x = getimagesize($ file); $ width = $ x [0]; $ height = $ x [1]; $ type = $ x [2];
//header('Content-type: $type');
if ($type == 1) {
$im = imagecreatefromgif($file);
} elseif ($type==2) {
$im = imagecreatefromjpeg($file);
} elseif ($type==3) {
$im = imagecreatefrompng($file);
}
// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
// Replace path by your own font path
$font = 'arial.ttf';
// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
ob_clean(); //to be sure there are no other strings in the output buffer
imagepng($im);
$string = ob_get_contents();
ob_end_clean();
return $string;
}
我想创建这个图像,然后以这样的方式输出它,我可以在屏幕上显示所有其他输出。
答案 0 :(得分:2)
如果您不想直接输出图像,请不要在功能中发送标题。每个浏览器都会将响应视为图像文件。
此外,返回后的imagedestroy($ im)永远不会被执行!
如果您只想创建图像并将其保存到文件,请检查imagepng() documentation。第二个参数接受文件名:
将文件保存到的路径。如果不 设置或NULL,原始图像流将 直接输出。
根据你的编辑:
你应该使用带有filename参数的imagepng来创建图像,然后从你的脚本链接到它。
小例子:
<?php
// ...
imagepng($im, 'foo.png');
?>
<img src="foo.png" />
另一种方法是通过使用包装器脚本传递图像/ png标头和直接输出来实现Davide Gualanos解决方案。
答案 1 :(得分:1)
你可以使用一个临时输出缓冲区来捕获函数的输出,然后用一个字符串填充它
示例:
ob_start();
...你的图像功能代码......
ob_clean(); //确保输出缓冲区中没有其他字符串
imagepng($ IM);
$ string = ob_get_contents();
ob_end_clean();
返回$ string;
$ string从imagepng();
获得所有输出答案 2 :(得分:1)
您必须将输出图像的脚本放在页面中,然后在html标记中调用该页面以显示它。
例:
image.php
<php
$image = $_GET['image'];
$text = $_GET['text'];
makeimage($image, $text);
?>
page.html中:
<html>
<body>
<img src="image.php?image=foo.jpg&text=hello" />
</body>
</html>