gd库 - 使用html作为echo的图像文本

时间:2014-10-07 16:39:16

标签: php gdlib

我正在使用GD库,我尝试使用php echo在图像上添加html。

<?php
$image = imagecreatefrompng("grafika.png");
$black = imageColorAllocate($image, 255, 255, 255);
$font = 'arial.ttf';
$text = 4;
if($text == 4) {
      echo '<div style="background-color: yellow; width: 100px; height: 100px;">some text here</div>';
    }
imagettftext($image, 16, 0, 50, 100, $black, $font, $text);
header("Content-type:  image/png");
imagepng($image); 
?>

我做错了什么? 有没有不同的方法来做到这一点?

2 个答案:

答案 0 :(得分:1)

你有两个问题。您将html转储到输出流中,然后使用.png图像的原始二进制内容跟踪该html。

据推测,你已经

<img src="yourscript.php">

这意味着您将HTML发送到仅允许二进制图像的上下文中。并且不知何故,希望浏览器知道您正在发送HTML AND 图像,并以某种方式将它们分开。

由于您正在进行回音,因此html成为图像的一部分,并且几乎所有浏览器都会将生成的图像视为损坏。他们期待PNG,它具有非常特定的标题格式。 HTML不符合该格式,因此显然图像已损坏。

答案 1 :(得分:0)

如果您允许将某些文字嵌入到图片中,则可以使用imagefilledrectangle功能:

<?php
$image = imagecreatefrompng("grafika.png");
$black = imageColorAllocate($image, 255, 255, 255);
$font = 'arial.ttf';
$text = 4;
if($text == 4) {
      imagefilledrectangle($image, 16, 0, 0, 50, 100, rgbcolorallocate($image, 255, 255, 0));
      imagettftext($image, 16, 0, 0, 0, $black, $font, 'some text here');
    }
imagettftext($image, 16, 0, 50, 100, $black, $font, $text);
header("Content-type:  image/png");
imagepng($image); 
?>

您还可以使用imagettfbbox函数计算文本的边界框。