2

问题:

我发现这个简单的脚本解释了如何使用 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

4 回答 4

4

你也可以这样做。

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

为我工作。

于 2013-10-21T04:56:26.653 回答
3

这是因为它返回图像数据,就好像您将图像文件作为文本包含在内一样。为了在 HTML 中显示图像,有以下img元素:

<img src="myimage.php" alt="Pretty, isn't it?">

您还应该收到一个警告,指出无法修改标头,因为它们已经发送,这应该提示您您正在做的事情......充其量是奇怪的。

将返回图像的代码放在一个单独的 PHP 文件中,或者确保在调用时返回 HTML 页面JPEG 图像。将这两者混合并不是一个好主意。

于 2013-10-21T04:53:35.213 回答
2

在调用imagejpeg()之前添加此行

header('Content-Type: image/jpeg');

这告诉浏览器您正在显示的图像不是 HTML。

于 2014-09-30T13:36:05.403 回答
0

您不能简单地将 PHP 代码嵌入 HTML 文档并发出图像 - 浏览器需要 HTML,而不是图像数据。您从 PHP 脚本发出的内容类型标头实际上并未发送,因为在到达该部分脚本时,标头已经发送。您的新标头将被丢弃,并在您的服务器日志中添加警告。

要使这项工作在您的 HTML 文档中包含一个 HTML 图像标记,并使用您的 PHP 脚本作为其src属性:

<body>
  <img src="myPHPScript.php">
</body>

你可以应用任何你需要的额外样式,就像你对任何其他图像一样。

于 2013-10-21T04:54:37.423 回答