使用GD库在一个文件中使用多个图像和HTML

时间:2013-09-14 12:13:20

标签: php html gd output

大家好日子。 长话短说,我正在尝试制作一个类似城市竞争对手的在线纸牌游戏。 为此,我主要使用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

3 个答案:

答案 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