2013-03-15 96 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