在php中创建图像

时间:2013-06-05 10:28:59

标签: php ajax

我正在使用php创建图像我几乎编码它但我非常重要的一点,我想在我的图像中选择我的字体系列,但只有当我选择字体系列,否则默认字体运行。此逻辑未正常运行。当我没有选择任何字体系列时,默认字体会运行并向我显示输入,但是当我选择任何字体时,它也会运行并且现有图像会被覆盖,但它不会显示屏幕上的输入。

请告诉我这是什么问题。这是我的php文件代码:

<?php
include_once('includes/includes.inc.php');
if(isset($_GET['txt'])){
$txt = $_GET['txt'];
$_SESSION['txt'] = $txt;
}

if(!isset($_SESSION['rand'])){
    $rand = mt_rand(100,1000);
    $_SESSION['rand'] = $rand;
}

    $im = @imagecreate(288, 288) or die("Cannot Initialize new GD image stream");
    $background_color = imagecolorallocate($im, 230, 248, 248);
    $text_color = imagecolorallocate($im, 85, 85, 85);



    if(isset($_GET['Smile'])){
        $query = mysql_query("SELECT * FROm tbl_fonts WHERE font_name = '".$_GET['Smile']."'");
        $get = mysql_fetch_array($query);
        $desfon = 'images/fonts/'.$get['font_name'].'.ttf';
        //echo $desfon;
        imagettftext($im, 55, 0, 155, 55, $text_color, $desfon, $_SESSION['txt']);
    }
    else{
        imagestring($im, 55, 155, 55,  $_SESSION['txt'], $text_color);
    }

    header("Content-Type: image/png");
    $filename1 = $_SESSION['txt'].$_SESSION['rand'].'.png';
    imagepng($im,$filename);
    echo '<img src="'.$filename.'" alt="" />';
?>

1 个答案:

答案 0 :(得分:0)

首先,在公共场所使用此代码之前,您确实应该处理一些安全问题。一个好的开始方法是通过查看Why shouldn't I use mysql_* functions in PHP?How to prevent SQL injection in PHP?来修复SQL注入问题

同样写入您直接从GET参数获取的文件名允许攻击者几乎在系统中的任何位置写入。确保验证输入。至少使用像basename()这样的东西来保存文件在同一目录中。

然后到你的实际问题。可能是您正在运行imagettftext manual

中提到的GD库版本
  

根据PHP使用的GD库版本,当fontfile不以前导/开头时,然后.ttf将附加到文件名,库将尝试沿库定义的字体路径搜索该文件名。

因此,您的服务器实际上可能正在寻找images/fonts/fontname.ttf.ttf,尝试像$desfon = 'images/fonts/'.$get['font_name'];一样使用它,看看它是否有效。

GDFONTPATH设置在脚本顶部并简单地使用$desfon = $get['font_name'];

也可能是个好主意。
<?php
// Set the enviroment variable for GD
putenv('GDFONTPATH=' . dirname(__FILE__).'/images/fonts/');
?>

调试应用程序的其他方法可能是转储imagettftext调用的内容并查看其内容。请注意,我将exit脚本,因此它不会创建实际图像,只是输出返回值。

<?
//your script

var_dump(imagettftext($im, 55, 0, 155, 55, $text_color, $desfon, $_SESSION['txt']));
exit();

//rest of script.
?>