我希望通过PHP最新观看动画制作一个独特的论坛签名。这些包含在RSS提要中。在我的本地apache服务器上,生成的图像很好,但是当我将其上传到服务器上时,我收到错误,根本没有生成图片。
这是我的代码,我想知道是什么问题,因为Dreamweaver CS5或phpDesigner 7都没有显示任何错误,虽然如果我按下phpDesigner中的Run按钮,我会收到错误,但我不知道它是什么手段。错误如下:
行:6 - 致命错误:在[php的路径]中调用未定义的函数imagecreatefrompng()
所以代码如下:
<?php
// title & description arrays
$titleCuts = array();
$descCuts = array();
// bg image
$bgimg = imagecreatefrompng('sig_robin.png');
// colors
$white = imagecolorallocate($bgimg, 255, 255, 255);
$textColor = imagecolorallocate($bgimg, 245, 193, 9);
$shapeColor = imagecolorallocate($bgimg, 27, 20, 0);
// sxe <- xml url
$sxe = new SimpleXMLElement('http://myanimelist.net/rss.php?type=rw&u=fema', NULL, TRUE);
// shape
imagefilledrectangle($bgimg, 255, 20, 567, 279, $shapeColor);
// TEXTS
imagettftext($bgimg, 20, 0, 263, 52, $white, "my.ttf", "Latest Watched:");
// episodes' text
for($i=0;$i<5;$i++)
{
// title cut and joint
$titleCuts = explode(' ', $sxe->channel->item[$i]->title, -2);
$titleCut = implode(' ',$titleCuts);
// description (ep) cut and joint
$descCuts = explode(' ', $sxe->channel->item[$i]->description);
// output
imagettftext($bgimg, 10, 0, 270, 77+($i*45), $textColor, "my.ttf", $titleCut);
imagettftext($bgimg, 10, 0, 270+(strlen($titleCut)*7.2), 92+($i*45), $textColor, "my.ttf", "ep. ".$descCuts[2]);
}
header('Content-type: image/png');
// generating image
imagepng($bgimg);
?>
提前致谢。
编辑:
当我删除标题时,现在我收到很多错误,它无法找到字体文件,但我确信我写的正确。
他们看起来像这样:
警告:imagettftext()[function.imagettftext]:无法在第19行找到/打开字体
答案 0 :(得分:2)
这意味着GD既没有编译成PHP也没有加载。首先,检查您的php.ini,phpinfo()
extension=php_gd2.dll
找到的phpinfo()
路径,并确保它没有用分号注释掉。更改设置后,重新启动Web服务器,然后再次查看{{1}}以查看GD是否已加载。
答案 1 :(得分:2)
如果未定义imagecreatefrompng
,则很可能GD库未安装或损坏,请参阅:http://php.net/manual/en/image.installation.php
不要被'你必须配置和重建PHP'吓到,通常你的操作系统的软件包管理器可以通过安装额外的软件包轻松添加GD支持。
答案 2 :(得分:1)
要使用此功能(imagecreatefrompng
),您的php需要与GD扩展一起安装(有关详细信息,请参阅this page。
要检查什么是/不是安装,只需:
在本地服务器上创建一个php文件然后将图像(GD)部分与服务器上运行的同一文件进行比较。
请注意,如果您在共享托管服务器上,则可能需要联系其管理员为您安装/配置此功能。
答案 3 :(得分:1)
好的,第二个问题的解决方案是它的php bug http://bugs.php.net/bug.php?id=41336
但它很容易以下列方式解决:
在每个* .ttf文件之前放置./
,如下例所示:
imagettftext(IMAGE, 0, 0, 0, 0, TEXT_COLOR, "./ttf_file.ttf", TEXT);