我想在使用imagecreatefromjpeg
等时使用imagecreatetruecolor
,imagecopyresized
,imagejpeg
和echo "<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吗?
提前致谢。
答案 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。