同时显示字符串和图像

时间:2012-09-04 23:54:12

标签: php image header

  

可能重复:
  Headers already sent by PHP

echo "how";

$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);

我想同时显示字符串“how”和图像,但我不想将此图像保存在文件中。

上面的代码不起作用。如果我拿走 echo“how”这一行,它就可以了。那么如果我想同时显示字符串和图像,我怎么能修改呢?

1 个答案:

答案 0 :(得分:1)

正如Nile已经指出的那样,您希望为图像使用Data-URI。

使用您的代码的工作代码示例如下:

echo "how";

$im         = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
$tmpImg     = tempnam('/tmp', 'image');

imagestring($im, 1, 5, 5,  'A Simple Text String', $text_color);
imagejpeg($im, $tmpImg);
imagedestroy($im);

echo '<img src="data:image/jpeg;base64,' . base64_encode(file_get_contents($tmpImg)) . '">';

unlink($tmpImg);

会发生什么?它或多或少是您使用的代码,但图像被写入临时文件而不是直接发送到浏览器 - 这是imagejpeg的第二个参数。 然后使用Base64-Encoding将临时文件的内容放入Data-URI中,然后将DataUri设置为image-tag的src。

您最后要删除临时文件!

如果要省略临时文件,可以使用输出缓冲来捕获图像。这看起来如下所示:

echo 'how';

$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);
$image = ob_get_contents();
ob_end_clean();

echo '<img src="data:image/jpeg;base64,' . base64_encode($image) . '">';