使用标题('内容类型:image / png')和echo""在一个.php

时间:2014-09-10 23:39:55

标签: php html header resize

我想在使用imagecreatefromjpeg等时使用imagecreatetruecolorimagecopyresizedimagejpegecho "<html><body>"; ...

由于某种原因,我得到"The image could not be displayed because there were errors on the page",直到我发表评论header('Content-type: image/png');,然后我才会看到一张破损图片的图片,就像一张撕裂的页面。

我所看到的是,我在同一个.php文件中不能拥有header('Content-type: image/png');和html。如果是这样的话,任何人都可以告诉我如何调整缩略图库的图像,同时仍然在.php文件中使用html吗?

提前致谢。

3 个答案:

答案 0 :(得分:8)

你正在混淆两件事。

其上有图片的网页,一般不会包含该图片。相反,它通常指的是外部来源。我说一般,因为,是的,图像可以嵌入到HTML页面中,见下文。

您有两种选择:

  • 您可以创建一个单独的PHP文件,您可以在其中创建图像并输出其字节。在HTML代码中,您可以参考该图片:

    <强> page.html中

    <html>
        <body>
            <img src="myimage.php" alt="" />
        </body>
    </html>
    

    <强> myimage.php

    <?php
    
    header("Content-Type: image/png");
    createimageandso_on();
    // Do the drawing.
    
    ?>
    
  • 或者您可以使用base64编码将图像嵌入HTML文件中:

    <?php
    
    $contents = all_bytes_from_created_image();
    // Get the bytes from the created image.
    $base64 = base64_encode($contents);
    
    ?>
    <html>
        <body>
            <img src="data:image/png;base64,<?php echo $base64; ?>" alt="" />
        </body>
    </html>
    

第二个选项适用于较小的图像,因为base64编码的字符串将产生大部分文本。


修改

如果我理解正确,你想从目录中读取图像并将它们调整为相同的大小,将它们用作缩略图吗?

您可能只想创建一个PHP文件,在该文件中读取源图像并为其提供相同的大小。

就像'普通'PHP文件一样,PHP可以使用您提供的请求参数执行某些操作。也许你见过这个:

  

http://example.com/somepage.php?key=value&anotherkey=anothervalue

问号(key=value&anotherkey=anothervalue)后面的字符串是查询字符串。 PHP可以使用值:

<?php

echo $_GET['key']; // returns "value"
echo $_GET['anotherkey']; // returns "anothervalue"

?>

现在我们可以在创建图像时也这样做。您不必使用几乎相同的代码制作20个PHP文件,而只需要读取文件(您将其命名)的单个文件并将其调整为指定的宽度(您将其命名)和高度(您将其命名)。

<强> thumbnail.php

<?php

// Get some request parameters we're going to use.
// We're expecting the parameters below to exist.
$file = $_GET['filepath'];
$width = $_GET['width'];
$height = $_GET['height'];

// Now we're gonna create the image from the given file.
$src = imagecreatefromjpeg($file);
imagecreatetruecolor($width, $height);
// And the rest of the file reading and image creation.

header("Content-Type: image/jpeg");
imagejpeg($image);

?>

<强> webpage.html

<html>
    <body>
        <?php

        $width = 100;
        $height = 100;
        $files = read_some_directory_and_return_a_list_of_filenames();

        foreach ($files as $file) {
            // Echo an image tag in the HTML document;
            // use as image our thumbnail.php file and give it a query string:
            echo "<img src=\"thumbnail.php?width=".$width."&height=".$height."&filepath=".$file."\" alt=\"\" />";
        }

        ?>
    </body>
</html>

答案 1 :(得分:2)

您所看到的内容是正确的 - 您不能拥有包含html内容的Content-type: image/png文件。浏览器会将html代码解释为编码的html数据,这是错误的。

您应该做的是将内容类型保留为text/html并将图像发送到html文档中,如下面的示例所示。为简单起见,我省略了<head>,但你应该添加一个。

<!DOCTYPE html>
<html>
<body>
    <img src="myimage.png" width="100" height="100" />
</body>
</html>

答案 2 :(得分:1)

您想要向下推到浏览器的图像中无法进行标记。你告诉浏览器期待一个图像,然后发送一些标记,这是一个禁忌。

我们可以做的是包含.php文件,该文件在imagecreatetruecolor个标记内使用img等函数:

<html>
<head><title>Image Test</title></head>
<body>
  <img src="image.php?file=A" />
  <img src="image.php?file=B" />
</body>
</html>

然后image.php将使用我们的image/jpeg标头并包含您的imagecreatefromjpeg代码。

<?
header('Content-Type: image/jpeg');
if ($_GET['file'] == 'A') {
    $img = imagecreatefromjpeg('image1.jpg');
} elseif ($_GET['file'] == 'B') {
    $img = imagecreatefromjpeg('image2.jpg');
}
// do your modification etc... here
imagejpeg($img);
imagedestroy($img);

您只能在image.php文件中输出“图片代码”,因为浏览器会将其视为常规jpeg。