2013-03-15 97 views
1

我已经在磁盘上的文件夹中的文件,我不希望从网络浏览器PHP:如何从磁盘输出到浏览器的PNG图像?

所以我创建占据一个文件名,并且必须“不回应”来的浏览器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是完美的。如何不要求下载它?

编辑

  • 是的,我需要的东西,把要使用的图像标签

你们中的大多数都回答我的问题告诉我有关图像创作,但我的问题是关于不同的模式告诉浏览器显示的东西,并要求用户保存的东西。 没有更多的答复关于图像创建 - 你是主题!

也许我的问题,我的头衔,并不清楚,但我的问题很简单:

- 如何告诉浏览器显示的图像insted的询问用户保存

图像创建经由IMAG SRC工作

图片使用正在

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

编辑:

删除

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

不会改变Firefox的行为

+0

''? – 2013-03-15 15:30:36

+0

你在img标签之间放置了mysite.com/image.php?name=selection.png吗? – jsedano 2013-03-15 15:31:12

+1

@jcarlos我认为他的意思是这个网址在最后看起来就像那样。 – 2013-03-15 15:32:41

回答

2

尝试;

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

你原来的'readfile'也应该工作:) – splash21 2013-03-15 15:47:51

+0

它不工作,或者不好:它工作正是我的阅读文件。输出生成后,问题不在于要求用户保存 – realtebo 2013-03-16 12:26:54

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' />'; 

编辑:我觉得我得到了棍子的错误结束了,但是哦!

+0

对不起,我无法使用数据:图片 – realtebo 2013-03-16 12:25:18

0

你可以选择使用PHP的imagepng

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

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

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

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

我还没有GD可用 – realtebo 2013-03-16 12:25:35

+0

然后尝试删除标题中的内容处置。 – cara 2013-03-16 12:32:47

1

您可以使用PHP的GD库。

在image.php中。

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

+0

对不起,我没有GD可用。我在数据库上没有图像,我在磁盘上。 – realtebo 2013-03-16 12:26:18