【问题标题】:Outputting raw image stream rather than jpeg, on-the-fly image resizing输出原始图像流而不是 jpeg,即时调整图像大小
【发布时间】:2012-05-29 09:18:33
【问题描述】:

我有一个 PHP 函数可以即时调整图像大小以创建缩略图。

我遇到了问题,因为它只是显示原始图像流而不是实际图像。

我的代码使用了一个叫做 thumbnail 的函数:

$thumbnail = thumbnail($item['filename'], 209, 137);
imagejpeg($thumbnail);

我试过了:

header("Content-type: image/jpeg");

但是,这只是希望整个页面是图像。我完全不知道从这里去哪里,已经工作了一段时间。我宁愿不将图像保存到磁盘,尽管它看起来可能是必要的。

【问题讨论】:

  • 这种技术破坏了浏览器缓存图像的能力,并且会给服务器带来很高的负载。
  • 有没有办法在不实际保存图像的情况下仍然显示它。我真的不介意服务器负载。
  • 输出图片前需要设置header。
  • 我做了,它仍然尝试将整个页面作为图像查看。
  • 我很困惑。你想达到什么目标?

标签: php html image


【解决方案1】:

你也可以

去做the normal way

这意味着你指向 one url,并提供 one 图像的内容:

<img src="myimage.php">

myimage.php 是一个看起来像这样的脚本:

header('Content-type: image/jpeg');
imagejpeg($thumbnail);
die;

这种技术的优点是......正常的做事方式。

内联输出图片

使用data uris将内容输出为base64 encoded string

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">

这种技术最适合小图像。

它的优点是所有图像都在主 http 请求中 - (可能相当大)的缺点是使页面更难编辑/构建并可能否定浏览器缓存的好处(除非 html 页面本身缓存)。

正常生活更容易

关于问题中的这个陈述:

但是,这只是希望整个页面是图像

没错 - 如果你按照正常方式使用图像标签的 src 属性指向你的 php 脚本,而服务器 only 是一个图像 - 即完全相同的响应就像您在使用浏览器指向图像文件一样。

除非你有充分的理由以不同的方式做事 - “正常”的方式是一个很好的起点。

【讨论】:

  • 整个脚本是一个包含在 html 页面上的内容,旨在显示所有图像。我是否应该将其更改为在另一个脚本中包含一个用于创建图像的脚本,该脚本的唯一目的是回显图像?
  • 我不明白你编辑的评论,如果你想让它工作,你可以从上面提供的选项中选择。提示:数据 uri 不常见
  • 去试试第二个。我得到的当前流来自 imagejpeg($thumbnail);所以尝试: echo '';我很确定我在这里的某个地方出错了
  • 嗯......你需要魔法才能工作,因为 imagejpeg 的输出不是 base64 编码的(另一个提示谷歌 base64 编码和 php)。祝你好运
  • 如果代码能像魔术一样工作,那就太好了,感谢您的帮助
【解决方案2】:

您可以将 html img 标签指向 php 文件。

<img src='thumbnail.php?file=<?php echo $item['filename']; ?>' />

然后在您的 php 文件中显示图像并更改标题,因为它所做的只是显示图像。

$thumbnail = thumbnail($_GET['filename'], 209, 137);
imagejpeg($thumbnail);

header("Content-type: image/jpeg");

【讨论】:

  • 我的 html 有: 里面有脚本,它会通过一个小的图像数据库并在我去的时候调整大小,我想要它能够正确显示它们这种特殊情况只有一张图片
  • 是的,您不想使用 php 包含功能,您想使用 html img 标签,以便它独立处理每个标签。
  • 它仍然必须有一个 php 函数遍历数据库的每个成员。
  • 这个想法是,不要将图像文件用作 HTML 中的 img 标记的 src,而是将 PHP 文件用作 src仅 在该特定位置显示您感兴趣的单个图像,使用诸如 GET 参数之类的东西来确定要显示哪个图像的缩略图。因此,在这种情况下,您将有一个 HTML 页面多次引用 PHP 脚本,但每次都使用不同的参数。这个 PHP 脚本会生成图像并像整页一样输出。
  • Correct Daan,您的 scripts/images.php 文件需要回显 html 图像标签而不显示图像。您不能在一个脚本中完成所有操作。您需要分开从数据库中获取多个图像并显示图像。
【解决方案3】:

您需要像在 HTML 中插入普通图像一样插入图像,并在单独的 PHP 文件中创建图像:

image.php

<?php
$img = imagecreate(100,100); //Create an image 100px x 100px
imagecolorallocate($img, 255,0,0); //Fill the image red
header('Content-type: image/jpeg'); //Set the content type to image/jpg
imagejpeg($img); //Output the iamge
imagedestroy($img); //Destroy the image
?>

myWebpage.html

<img src="image.php" />

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    相关资源
    最近更新 更多