PHP GD:无法显示图像

时间:2015-10-11 20:43:13

标签: php

就PHP而言,我是一个绝对的初学者,但我试图使用PHP GD /图像显示来制作一些图形。

我尝试将<?php echo "<p>Hello, Word!</p>" ?>包含在HTML文件中,并且没有问题。接下来,我尝试了here中的示例并将其复制到了button.php,

<?php

header("Content-type: image/png");
$string = $_GET['text'];
$im     = imagecreatefrompng("images/button1.png");
$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);

?>

然后我将test_button.html改为

<html>

<head>
  <title>Testing button.php</title>
</head>

<body>

<p>It should be between here...</p>

<p align="center">
  <img src="button.php?text=text">
</p>

<p> ... and here</p>

</body>

</html>

当我用浏览器打开文件时,我得到一个破损的图像符号。如果我尝试上传php文件,我会收到消息

  

无法显示图片http://.../button.php?text=text,因为它包含错误。

我在安装了php5,apache等的raspberry pi上试了一下。在具有LAMP的服务器上。甚至在我的笔记本电脑上。全部运行Debian。

在raspberry pi上,我尝试了phpinfo()并启用了GD。 Libpng也是。

我在这里或其他网站上看过,但没有类似的错误与我有关。在PHP文件中,我在<?php之前没有空格/空行,而?>之后也没有。

我确定我错过了一个基本步骤。但我无法弄清楚错误是什么。在另一个类似的测试中,没有header()(注释掉),我出现了一堆字符。

如前所述,我试图检查vim是否由于编码而没有添加一些奇怪的字符,我测试并得到了

$ file -i button.php 
button.php: text/x-php; charset=us-ascii

并与另一位编辑打开。但不,再也没有。

有人能指出我正在做的(可能是显而易见的)错误吗?

从第一条评论进行修改,评论header(...),删除跟踪?>并添加error_reporting(E_ALL); ini_set('display_errors', 1);

当我到达button.php?text = text时,我得到了

Warning: imagecreatefrompng(images/button1.png): failed to open stream: No such file or directory in /var/www/therm/button.php on line 6
Warning: imagecolorallocate() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 7
Warning: imagesx() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 8
Warning: imagestring() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 9
Warning: imagepng() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 10
Warning: imagedestroy() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 11

1 个答案:

答案 0 :(得分:1)

运行调试建议后,我意识到函数imagecreatefrompng()无法打开流。这让我意识到了明显的错误,即该函数旨在在已有的PNG文件上添加一些文本。这是在源上指出的(如果我花时间实际阅读所有内容)

  

这&#34; text&#34;字符串并将其叠加在基本图像的顶部,在这种情况下是&#34; images / button1.png&#34;并输出结果图像

所以我创建了一个images/button1.png(实际上是来自网络),重新启用header(),这次它有效。

感谢您的评论,他们帮助我了解了PHP的一些调试工具。