GD 库图像生成不适用于 mySQL 查询
GD Library image generation does not work with mySQL query
长话短说,我有一个项目需要根据数据库中的数据创建用户头像。头像是使用 imagepng() 和 imagecopy() 函数生成的。
用户的头像可以是男性或女性,并且该偏好保存在 SQL 数据库中作为列 "user_gender",其中“0”= 女性,“1”= 男性:
Screenshot of table in phpmyadmin
所以我们的想法是,我们从数据库中获取数据,将值(0 或 1)分配给变量,然后使用该变量生成图像。请参阅下面的代码:
<?php
//Database connection script not included, but works fine
$id = 1;
$sqlQuery = "SELECT * FROM table WHERE id = :id";
$statement = $db->prepare($sqlQuery);
$statement->execute(array(':id' => $id));
while($rs = $statement->fetch())
{
$gender = $rs['user_gender'];
}
if($gender == "0")
{
//Allocation of images, file paths
$bodytype ="images/female/f_body.png";
}
else
{
$bodytype ="images/male/f_body.png";
}
header('Content-Type: image/png');
$destination = imagecreatefrompng($bodytype);
imagealphablending($destination, true);
imagesavealpha($destination, true);
imagepng($destination);
?>
然而,此代码不起作用,因为它会在浏览器上生成一个空白的黑页。
然而,这段代码,没有从数据库中提取任何内容,工作得很好:
<?php
//taking out the sql query and just creating a $gender variable for testing
$gender = "0";
if($gender === 0)
{
$bodytype ="images/female/f_body.png";
}
else
{
$bodytype ="images/female/f_body.png";
}
header('Content-Type: image/png');
$destination = imagecreatefrompng($bodytype);
imagealphablending($destination, true);
imagesavealpha($destination, true);
imagepng($destination);
?>
这是第二个代码的输出,表明图像生成确实有效,问题很可能是从 sql 到 php 的传递:
Working image generation in browser
如果知道我做错了什么,或者被提示为什么从数据库中提取变量时代码停止工作,我将非常感激。
谢谢!
我尝试了您的代码并遇到了同样的问题,所以我对它进行了一些挖掘,发现没有从数据库返回任何内容,所以我所做的是在数据库名称前加上表名,它起作用了。请参阅下面的代码
$gender = '';
$sqlQuery = "SELECT * FROM register.users WHERE id = :id";
$statement = $db->prepare($sqlQuery);
$statement->execute(array('id' => 1));
while($rs = $statement->fetch())
{
$gender = $rs['gender'];
}
if($gender == 0)
{
$bodytype ="images/female/f_body.png";
}
else if($gender == 1)
{
$bodytype ="images/male/m_body.png";
}
$destination = imagecreatefrompng($bodytype);
imagealphablending($destination, true);
imagesavealpha($destination, true);
header('Content-Type: image/png');
imagepng($destination);
试一试,告诉我进展如何。
长话短说,我有一个项目需要根据数据库中的数据创建用户头像。头像是使用 imagepng() 和 imagecopy() 函数生成的。
用户的头像可以是男性或女性,并且该偏好保存在 SQL 数据库中作为列 "user_gender",其中“0”= 女性,“1”= 男性:
Screenshot of table in phpmyadmin
所以我们的想法是,我们从数据库中获取数据,将值(0 或 1)分配给变量,然后使用该变量生成图像。请参阅下面的代码:
<?php
//Database connection script not included, but works fine
$id = 1;
$sqlQuery = "SELECT * FROM table WHERE id = :id";
$statement = $db->prepare($sqlQuery);
$statement->execute(array(':id' => $id));
while($rs = $statement->fetch())
{
$gender = $rs['user_gender'];
}
if($gender == "0")
{
//Allocation of images, file paths
$bodytype ="images/female/f_body.png";
}
else
{
$bodytype ="images/male/f_body.png";
}
header('Content-Type: image/png');
$destination = imagecreatefrompng($bodytype);
imagealphablending($destination, true);
imagesavealpha($destination, true);
imagepng($destination);
?>
然而,此代码不起作用,因为它会在浏览器上生成一个空白的黑页。
然而,这段代码,没有从数据库中提取任何内容,工作得很好:
<?php
//taking out the sql query and just creating a $gender variable for testing
$gender = "0";
if($gender === 0)
{
$bodytype ="images/female/f_body.png";
}
else
{
$bodytype ="images/female/f_body.png";
}
header('Content-Type: image/png');
$destination = imagecreatefrompng($bodytype);
imagealphablending($destination, true);
imagesavealpha($destination, true);
imagepng($destination);
?>
这是第二个代码的输出,表明图像生成确实有效,问题很可能是从 sql 到 php 的传递:
Working image generation in browser
如果知道我做错了什么,或者被提示为什么从数据库中提取变量时代码停止工作,我将非常感激。
谢谢!
我尝试了您的代码并遇到了同样的问题,所以我对它进行了一些挖掘,发现没有从数据库返回任何内容,所以我所做的是在数据库名称前加上表名,它起作用了。请参阅下面的代码
$gender = '';
$sqlQuery = "SELECT * FROM register.users WHERE id = :id";
$statement = $db->prepare($sqlQuery);
$statement->execute(array('id' => 1));
while($rs = $statement->fetch())
{
$gender = $rs['gender'];
}
if($gender == 0)
{
$bodytype ="images/female/f_body.png";
}
else if($gender == 1)
{
$bodytype ="images/male/m_body.png";
}
$destination = imagecreatefrompng($bodytype);
imagealphablending($destination, true);
imagesavealpha($destination, true);
header('Content-Type: image/png');
imagepng($destination);
试一试,告诉我进展如何。