PHP:如何从磁盘输出到浏览器的png图像?

时间:2013-03-15 15:28:48

标签: php

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

所以我创建了一个带有文件名的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的行为

5 个答案:

答案 0 :(得分:2)

试;

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

答案 1 :(得分: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' />';

编辑:我想我在这里得到了错误的结局,但是哦,好吧!

答案 2 :(得分:1)

您可以使用PHP的GD库。

在你的image.php。

<?php
    header('Content-type: image/png');
    $file_name = $_GET['name'];
    $gd = imagecreatefrompng($file_name);
    imagepng($gd);
    imagedestroy($gd);
?>

答案 3 :(得分:0)

您也可以使用PHP的imagepng

  

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

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

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

imagepng($im);
imagedestroy($im);
?>

答案 4 :(得分: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>";

如果您使用网址参数

选择图片,则最好使用上述方法

否则:

$Picture = $_Get['Name'];

$Image = imagecreatefrompng($Picture);

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

imagepng($Image);

可能是解决方案

手动:

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