大家好日子。 长话短说,我正在尝试制作一个类似城市竞争对手的在线纸牌游戏。 为此,我主要使用PHP和SQL。 现在,我正在尝试基于数据库生成卡片的png文件。
我已经设法将图像与alpha通道合并,以便为图像添加文本,但我真正的问题是:我似乎无法将此图像与其他HTML文档的基本布局一起输出。这是我的测试代码:
<?php
include 'phpGDtools.php';
$image1path = 'monstercard.png';
$image2path = 'monsterimage.png';
$xdim = 220;
$ydim = 301;
//$image = mergeTwoPNGAndReturn($image1path, $image2path, $xdim, $ydim);
mergeTwoPNGAndOutputInBrowser($image1path, $image2path, $xdim, $ydim);
echo('Hello !');
?>
抱歉格式错误,我无法做到更好:/ 这是我在phpGDTools.php中的函数:
function mergeTwoPNGAndOutputInBrowser($image1path, $image2path, $xdim, $ydim)
{
//TEST FUNCTION
//Both paths to the images, x and y dimensions of the image you're about to fuse.
$final_img = imagecreate($xdim, $ydim);
//Step 1 : Create the objects from the PNGs
$image_1 = imagecreatefrompng($image1path);
$image_2 = imagecreatefrompng($image2path);
//Step 1.2 : Allow transparency of bases.
imagealphablending($image_1, true);
imagesavealpha($image_1, true);
imagealphablending($image_2, true);
imagesavealpha($image_2, true);
//Step 2 : Merge the images into one.
imagecopy($image_1, $image_2, 0, 0, 0, 0, $xdim, $ydim);
imagecopy($final_img, $image_1, 0, 0, 0, 0, $xdim, $ydim);
//Step 3 : Allow transparency of final image.
imagealphablending($final_img, true);
imagesavealpha($final_img, true);
//Step 4 : Output image to browser.
header('Content-Type: image/png;');
imagepng($image_1);
}
这样可以很好地输出图像,但是文本“你好!”无处可寻。 另外,请忽略关于“$ final_image”的部分,它仅用于测试。 你可能已经注意到我评论了这一行:
//$image = mergeTwoPNGAndReturn($image1path, $image2path, $xdim, $ydim);
这是我想要使用的功能:希望,我的目标是将这个php文件包含到html页面中,然后能够在两个标签之间打印图像对象。 从技术上讲,我可以将其保存为文件,然后输出文件,但考虑到我的项目,这将是非常低效的。
感谢您帮助我。
~Jules Courtois
答案 0 :(得分:0)
看起来你正试图从同一个php脚本输出图像数据和html数据。 你调用函数
mergeTwoPNGAndOutputInBrowser();
将图像标题输出到浏览器。 然后你
echo('Hello !');
其中'hello'是文本数据而不是图像数据......因此它不会显示在图像中。 你可以这样做。
<?php
include 'phpGDtools.php';
$image1path = 'monstercard.png';
$image2path = 'monsterimage.png';
$xdim = 220;
$ydim = 301;
if(isset($_GET['display_image'])){
//Output image data
mergeTwoPNGAndOutputInBrowser($image1path, $image2path, $xdim, $ydim);
}
else{
//Output page data
echo 'Hello !';
echo "<img src=\"?display_image\">";
}
?>
答案 1 :(得分:0)
您正在将内容类型设置为图像,因此您发回的任何内容都将被解释为图像。当您回显HTML时,您正在添加图像数据,导致浏览器无法读取图像。
您需要创建一个HTML页面,然后在HTML文件中引用图像,并使用带有src的标记或图像的URL来标记图像的URL,或者您可以使用内嵌的图像进行基础64.
你可以替换
imagepng($image_1);
带
ob_start();
imagejpeg($image_1);
$image_data = ob_get_contents ();
ob_end_clean ();
$image_data_base64 = base64_encode($image_data);
echo '<img src="data:image/png;base64,' . $image_data_base64 . '" />';
您应该避免动态处理图像并尝试存储它们,但这应该达到您在问题中提出的要求。
答案 2 :(得分:0)
由于您已设置标题
,因此文本未显示 header('Content-Type: image/png;');
为什么不使用相同PHP GD库的 imagestring()
。它让你在图像上写下文字。
这是一个很酷的例子。您可以将相同的代码嵌入 mergeTwoPNGAndOutputInBrowser()
功能。
<?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, 'Hello world!', $textcolor);
// Output the image
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
<强> Source 强>