生成图像后回声丢失

时间:2011-02-10 07:54:38

标签: php

$data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
      . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
      . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
      . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
$data = base64_decode($data);

$im = imagecreatefromstring($data);
if ($im !== false) {

    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header('Content-Type: image/png');
    imagepng($im);

    //echo '<a href=\'imagepng('.$im.')\'> Download </a>';
    echo "-----------------";

} else {
    echo 'An error occurred.';
}

它显示图像但不回显“==============”。

4 个答案:

答案 0 :(得分:5)

你告诉浏览器期待一个图像,因此它只是期待一个图像。发送的 Everything 将被视为该图片数据的一部分。不,它不会将您发送的文本转换为图像的一部分。

答案 1 :(得分:2)

这是因为你的

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

它可以防止您回显本页面上的图片以外的其他内容。 (好吧,它确实没有,但你的浏览器认为这仍然是图片的一部分)

如果你想回显图片和文字,你需要一个单独的文件,例如:像这样

echo '<img source="./pic.php" alt="pic" height="20" width="20" />';
echo '______________';

wehere pic.php是文件的路径,它回显了图片。

答案 2 :(得分:2)

有两种显示方式。作为免责声明,我将在生产中添加不使用它。并非所有浏览器都支持此功能,并且它不是真的:

header('Content-Type: text/html');

ob_start();
imagepng($im);
$data = base64_encode(ob_get_clean());

printf('<img src="data:image/png;base64,%s" />', $data);
print('---------');

答案 3 :(得分:1)

你正在生成一个图像(因此标题),所以如果你之后回显一些东西,你基本上是在图像的字节之后回显“---”。 您的浏览器认为您的.php脚本现在是一个图像,并且不会将“---”显示为纯文本并尝试将其添加到图像中。