библиотека gd — текст на изображении как эхо с html

Я использую библиотеку GD, и я попытался добавить HTML на изображение с помощью php echo.

<?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

Решение

У тебя две проблемы. Вы помещаете html в свой выходной поток, а затем добавляете html в исходное двоичное содержимое изображения .png.

Предположительно у вас есть

<img src="yourscript.php">

Это означает, что вы отправляете HTML в контекст, где разрешено только двоичное изображение. И почему-то ожидая, что браузер узнает, что вы отправляете HTML А ТАКЖЕ образ и каким-то образом сможет их отделить.

Поскольку вы делаете это эхо, HTML становится ЧАСТЬ изображения, и полученное изображение будет считаться поврежденным почти каждым браузером во вселенной. Они ожидают PNG, который имеет очень специфический формат заголовка. HTML не будет соответствовать этому формату, поэтому очевидно, что изображение повреждено.

1

Другие решения

Если вам разрешено встраивать некоторый текст здесь в изображение, чем вы можете использовать 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 функция для расчета ограничительной рамки текстов.

0