Я использую библиотеку 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);
?>
Что я делаю неправильно ?
Есть ли другой способ сделать это?
У тебя две проблемы. Вы помещаете html в свой выходной поток, а затем добавляете html в исходное двоичное содержимое изображения .png.
Предположительно у вас есть
<img src="yourscript.php">
Это означает, что вы отправляете HTML в контекст, где разрешено только двоичное изображение. И почему-то ожидая, что браузер узнает, что вы отправляете HTML А ТАКЖЕ образ и каким-то образом сможет их отделить.
Поскольку вы делаете это эхо, HTML становится ЧАСТЬ изображения, и полученное изображение будет считаться поврежденным почти каждым браузером во вселенной. Они ожидают PNG, который имеет очень специфический формат заголовка. HTML не будет соответствовать этому формату, поэтому очевидно, что изображение повреждено.
Если вам разрешено встраивать некоторый текст здесь в изображение, чем вы можете использовать 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
функция для расчета ограничительной рамки текстов.