我有一个设置为字符串的变量($output
)。
为了给这个字符串添加一个我正在使用PHP: GD Library的图像。
特别是imagestring()函数,我正在使用它进行了一些非常小的修改:
<?php
// Create a 100*30 image
$im = imagecreate(100, 30);
// White background and blue text
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);
// Write the string at the top left
imagestring($im, 5, 0, 0, $output, $textcolor); #here is my string $output
// Output the image
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
这是按预期工作的:它将$output
变成图像。
所以,我的问题是(至少我最好的猜测):
header('Content-type: image/png');
其中,不允许我输出任何html。
所以我读了这个问题,asks if you can use two headers,你不能,但是the accepted answer建议,这样的话:<img src="my_img.php" />
这当然没问题,除了我不知道如何解决我的问题,因为即使我知道这张图片的来源(我不知道 - 所以,那将是我的第一个问题,生成图像的路径是什么* )我不会改变标题在那里并且不让我输出文本的事实。
那么,我将如何解决这个问题呢?
提前致谢!!
*我想这可以解决我的问题,因为我可以在外部文件上执行此操作,只需调用图像(但可能不是因为我必须执行包含,这也包括标题),如您所见我有点困惑。对不起:)
更新
所以我看到我的问题令人困惑,所以我会添加更多代码,看看这是否能更多地澄清我的问题:
<?php
$x = mt_rand(1,5);
$y = mt_rand(1,5);
function add($x, $y) { return $x + $y; }
function subtract($x, $y) { return $x - $y; }
function multiply($x, $y) { return $x * $y; }
$operators = array(
'add',
'subtract',
'multiply'
);
$rdno = $operators[array_rand($operators)];
$result = call_user_func_array($rdno, array($x, $y));
session_start();
$_SESSION['res'] = $result;
if ($rdno == "add") {
$whato = "+";
}elseif ($rdno == "subtract") {
$whato = "-";
} else {
$whato = "*";
}
$output = $x . $whato . $y . " = ";
?>
<form name="input" action="check.php" method="post">
<input type="text" name="result" />
<input type="submit" value="Check" />
</form>
我希望$output
成为一个图片,所以这让我尝试使用上面的PHP:GD脚本,但由于标题我无法放入同一个文件
答案 0 :(得分:3)
您需要创建一个单独的PHP脚本来提供图像,然后创建一个指向此脚本的<img>
标记。
您可以使用图片网址中的查询字符串向脚本发送信息。
答案 1 :(得分:3)
这意味着你需要了解这一切是如何运作的。此问题表明您对工具有一个基本的误解。 HTML不能包含图像,它包含图像链接。因此,您的脚本需要通过图像标记从其他页面中包含。 (或CSS)
然而,这一切都是好事。这意味着此脚本可以具有动态元素,每次调用它时都会生成新图像。或者它可以对您的图像进行密码保护,这样只有登录的用户才能看到它。
有很多方法可以使用它。一旦你意识到图像就像一个页面到PHP,这将打开新的路线。 Php可以输出任何东西。 Word docs,excel,pdf,css,甚至是JS。所有这些都可以用来做很酷的事情。
只需将图像视为单独的页面即可。你会明白的。它只会在你的脑海中点击。其中一个重大的“啊哈”时刻。
答案 2 :(得分:1)
首先,路径。
imagepng(resource $ image [,string $ filename [,int $ quality [,int $ filters]]])
这意味着如果你不给出第二个参数(这里就是这种情况),你就没有文件的路径,而是文件/图像资源的数据。由于您提供的标题,浏览器将php文件理解作为png文件。
第二:
在您的页面中(例如 index.php ),您可以像这样添加
<img src="myimg.php?output=[...]" />
并在您的php脚本 myimg.php 中,您可以这样:
<?php
$output = $_GET['output'] // getting your text
// Create a 100*30 image
$im = imagecreate(100, 30);
// White background and blue text
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);
// Write the string at the top left
imagestring($im, 5, 0, 0, $output, $textcolor); #here is my string $output
// Output the image
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
2分隔文件。
答案 3 :(得分:1)
您可以使用echo '<img src="data:image/png;base64,'. base64_encode(imagepng($im)) .'" />
而非<img src="my_img.php">
内联发送图片
不要设置内容类型标题!您的输出是text / html,您不必宣布,因为它是大多数服务器设置中的默认设置。
答案 4 :(得分:0)
HTTP无法正常工作。当您正在提供image / png数据时,就好像您正在从站点提供png文件,而不是带有图像的html文件。你想要完成什么?
答案 5 :(得分:0)
my_img.php不是您图片的来源。它是生成该图像的脚本的源,或者从文件中读取并直接输出到浏览器中。显然,使用img src的方法是最好的,因为你将隐藏在浏览器机制后面显示图像字符串的所有“无聊”实现。