1

我在磁盘上的文件夹中有一个文件,我不想从网络浏览器中看到

所以我创建了一个带有文件名的 image.php 文件,并且必须“回显”到图像的浏览器。

例子:

mysite.com/image.php?name=selection.png

必须在浏览器中向用户显示图像。

实际上浏览器要求我保存。我想展示它,而不是要求下载...

我正在使用这个片段

header("Content-Type: image/png");
header('Content-Length: ' . filesize($full_file_name));
header("Content-Disposition: inline; filename='$image'");
readfile($full_file_name);
exit(0);

如果保存并打开,img 是完美的。如何不要求下载它?

编辑

  • 是的,我需要在图像标签中使用一些东西

你们中的大多数人都在回答我的问题,告诉我有关图像创建的问题,但我的问题都是关于告诉浏览器显示某些内容并要求用户保存某些内容的不同模式。没有更多关于图像创建的回复 - 你离题了!

可能我的问题,我的标题,不清楚,但我的问题很简单:

- 如何告诉浏览器显示图像以要求用户保存它

图像创建工作

通过 imag src 使用图像正在工作

**但是当用户单击图像时,会打开一个新选项卡,其中包含图像 src 作为链接,因为我需要在浏览器中显示全尺寸图像。在这种情况下,浏览器要求我保存!

编辑:

移除

header("Content-Disposition: inline; filename='$image'");

不会改变 Firefox 的行为

4

5 回答 5

2

尝试:

header("Content-type: image/png");
passthru("cat $full_file_name");

如果您正在使用用户输入,请非常小心 passthru 命令,因为此函数将执行您传递的任何内容。

https://www.php.net/manual/en/function.passthru.php

当允许将用户提供的数据传递给此函数时,请使用 escapeshellarg() 或 escapeshellcmd() 以确保用户无法欺骗系统执行任意命令。

于 2013-03-15T15:36:32.043 回答
1

为此,您必须对图像进行 base64 编码,然后输出结果。你可以使用这样的函数:

<?php

/**
 * Base64 encodes an image..
 *
 * @param [string] $filename [The path to the image on disk]
 * @param [string] $filetype [The image file type, (jpeg, png, gif, ...)]
 */
function base64_encode_image($filename, $filetype) 
{
    if ($filename) 
    {
        $imgBinary = fread(fopen($filename, "r"), filesize($filename));

        return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
    }
}

然后将结果作为图像的源输出,如:

$image = base64_encode_image('...name of file', '... file type');
echo "<img src='$image' />';

编辑:我想我在这里弄错了,但是哦,好吧!

于 2013-03-15T15:33:13.863 回答
1

您可以使用 PHP 的 GD 库。

在你的 image.php 中。

<?php
    header('Content-type: image/png');
    $file_name = $_GET['name'];
    $gd = imagecreatefrompng($file_name);
    imagepng($gd);
    imagedestroy($gd);
?>
于 2013-03-15T15:35:55.247 回答
0

您也可以使用 PHP 的imagepng

imagepng — 将 PNG 图像输出到浏览器或文件

<?php
$im = imagecreatefrompng("test.png");

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

imagepng($im);
imagedestroy($im);
?>
于 2013-03-15T15:35:33.593 回答
0

如果您的图片路径存储在数据库中,则此方法可以。(我已经使用 MySQLi 进行了示例,将其调整为您的数据库 API)

CREATE TABLE IF NOT EXISTS `PicturePath` (
  `ID` int(255) NOT NULL AUTO_INCREMENT,
  `Path` varchar(255) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0;

    --
INSERT INTO `PicturePath` (`ID`, `Path``) VALUES
(1, 'img/picture.png')
//End DB
// Start script


    $PictureID = $_GET['Name'];

    $Get_Picture = $Conn->prepare("SELECT PicturePath FROM pictures WHERE ID=?");
    $Get_Picture->bind_param('i', $PictureID);
    $Get_Picture->execute();
    $Get_Picture->bind_result($Path);
    $Get_Picture->close();
    echo "<img src='$Path'></img>";

如果您使用 URL 参数选择图像,上述方法是最好的

除此以外:

$Picture = $_Get['Name'];

$Image = imagecreatefrompng($Picture);

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

imagepng($Image);

可能是解决方案

手册在这里:

http://php.net/manual/en/function.imagepng.php

于 2013-03-15T15:37:35.910 回答