PHP imagejpeg()显示奇怪的字符

时间:2013-10-21 04:46:39

标签: php

问题:

我发现这个简单的脚本解释了如何使用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()显示图像,而不是文本......

有谁知道如何修复它?感谢。

4 个答案:

答案 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>

您可以应用所需的任何其他样式,就像使用任何其他图像一样。