我正在使用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);
?>
我做错了什么? 有没有不同的方法来做到这一点?
答案 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
函数计算文本的边界框。