问题:
我发现这个简单的脚本解释了如何使用imagejpeg():
<?php
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);
header('Content-Type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
?>
当我在一个空的php文件中复制/粘贴它时它可以正常工作。我显示了一张图片。
现在,当我将此代码插入我现有的一个php文件时,格式如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
***code above***
</body>
</html>
它不会返回任何图像。只是奇怪的字符行。
我认为发生了什么:
我读了其他帖子,我认为问题来自我的主标题'Content-Type'。但我不明白为什么嵌入代码中的'Content-Type:image / jpeg'不会取代主标题中写入的内容?它应告诉imagejpeg()显示图像,而不是文本......
有谁知道如何修复它?感谢。
答案 0 :(得分:3)
这是因为它返回图像数据,就像您将图像文件包含为文本一样。要在HTML中显示图像,需要img
元素:
<img src="myimage.php" alt="Pretty, isn't it?">
您还应该收到一个警告,标题无法修改,因为它们已经发送过,这应该会让您知道您正在做的事情......最好是奇怪的。
放置代码以在单独的PHP文件中返回图像,或者确保在调用时获得HTML页面或返回JPEG图像。混合这两者并不是一个好主意。
答案 1 :(得分:3)
你也可以这样做。
<?php
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);
ob_start ();
imagejpeg($im);
imagedestroy($im);
$data = ob_get_contents ();
ob_end_clean ();
$image = "<img src='data:image/jpeg;base64,".base64_encode ($data)."'>";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php echo $image; ?>
</body>
</html>
适合我。
答案 2 :(得分:2)
在致电 imagejpeg()
之前添加此行header('Content-Type: image/jpeg');
告诉浏览器您正在显示的图像不是HTML。
答案 3 :(得分:0)
您不能简单地将PHP代码嵌入HTML文档并发出图像 - 浏览器需要HTML,而不是图像数据。您从PHP脚本发出的内容类型标头实际上并未发送,因为到达脚本部分时已经发送了标头。您的新标头将被丢弃,并在服务器日志中添加警告。
要使这项工作在HTML文档中包含HTML图像标记,并使用PHP脚本作为其src
属性:
<body>
<img src="myPHPScript.php">
</body>
您可以应用所需的任何其他样式,就像使用任何其他图像一样。