0

今天是个好日子。长话短说,我正在尝试制作一款类似于城市对手的在线纸牌游戏。为此,我主要使用 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 页面中,然后能够在两个标签之间打印图像对象。从技术上讲,我可以将其保存为文件,然后输出文件,但考虑到我的项目,这将是非常低效的。

谢谢你帮助我。

~朱尔斯·库尔图瓦

4

3 回答 3

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\">";
}
?>
于 2013-09-14T12:35:27.957 回答
0

您将内容类型设置为图像,因此您发回的任何内容都将被解释为图像。当您回显 HTML 时,您将添加到图像数据中,这会导致浏览器无法读取图像。

您需要创建一个 HTML 页面,然后使用带有 src 的或标记的 HTML 文件中的图像引用图像的 URL,或者您可以 base64 图像以内联使用它。

你可以更换

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 . '" />';

您应该避免动态处理图像并尝试存储它们,但这应该可以实现您在问题中提出的要求。

于 2013-09-14T12:35:30.940 回答
0

由于您设置了标题,因此未显示文本

   header('Content-Type: image/png;');

为什么不使用imagestring()相同的 PHP GD 库。它可以让你在图像上写文字。

这是一个很酷的例子。您可以将相同的代码嵌入到您的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);
?>

来源

于 2013-09-14T12:45:20.210 回答