2010-09-25 86 views
2

我希望PHP能夠發送3個圖像中的1個,具體取決於參數$_GET[]。我現在將圖像作爲三個獨立的PNG,並希望PHP腳本將它們嵌入其中,然後返回指定的圖像。所以,我想要一個PHP腳本而不是3個圖像。這可能嗎?我不需要即時創建特殊圖像,只需打印其中一個。謝謝!讓PHP頁面輸出靜態圖像

回答

4

如果您的圖片文件,使用PHP的readfile()功能,並輸出之前發送的內容類型標頭:

<?php 
$imagePaths = array(
    '1' => 'file1.png', 
    '2' => 'file2.png', 
    '3' => 'file3.png', 
); 

$type = $_GET['img']; 

if (isset($imagePaths[$type])) { 
    $imagePath = $imagePaths[$type]; 
    header('Content-Type: image/png'); 
    readfile($imagePath); 
} else { 
    header('HTTP/1.1 404 File Not Found'); 
    echo 'File not found.'; 
} 
?> 

編輯:
您還可以通過編碼它們例如嵌入您的圖片腳本作爲Base64,然後將它們嵌入在PHP中的字符串,然後用base64_decode有對其進行解碼,以解救他們

<?php 
$imageData = array(
    '1' => '...', // Base64-encoded data as string 
    ... 
); 

$type = $_GET['img']; 

if (isset($imageData[$type])) { 
    header('Content-Type: image/png'); 
    echo base64_decode($imageData[$type]); 
} else { 
    header('HTTP/1.1 404 File Not Found'); 
    echo 'File not found.'; 
} 
?> 

你也可以使用PHP來對圖像進行編碼的命令行上。只是在執行命令行(php script.php image1.png image2.png image3.png > output.php)這個PHP腳本並保存它的輸出,並將其納入你的腳本:

<?php 
$imageData = array(); 

foreach ($argv as $index => $imagePath) 
    $imageData[(string)($index + 1)] = base64_encode(file_get_contents($imagePath)); 

echo '$imageData = '.var_export($imageData, true).';'; 
?> 
+0

非常感謝Archimedix!我會看看,這正是我需要的! – 2010-09-25 22:16:38

+0

工作正常!謝謝! – 2010-09-25 22:19:29

+0

使用類似這樣的方法('header()'輸出內容類型期望並使用'readfile')導致IE9默認爲Quirks作爲文檔模式。可以做任何事情告訴IE不要怪,這只是一個圖像? [示例](http://www.homeeducatormom.com/wp-content/uploads/2012/11/orange-scarf1.jpg)(不是我的網站) – veeTrain 2013-07-23 19:35:08

1

是的,這是可能的。

這樣做:

  1. 寫PHP腳本決定哪些圖像輸出。
  2. 使用header()函數(即內容類型)設置適當的標頭
  3. 打開文件,讀取它並將其發送到輸出流。

請記住,你可能會從瀏覽器的使用這種方法緩存丟失任何好處......

+0

這不會仍然需要有圖像作爲單獨的文件?有什麼方法將它們嵌入到腳本中? – 2010-09-25 22:05:17

+0

他爲什麼要放寬瀏覽器緩存?圖像仍然通過具有GET參數的唯一URL進行定位。 – doc 2010-09-25 22:06:35

+0

你爲什麼要嵌入一個腳本的圖像? – 2010-09-25 22:07:28

0

一種快速,但沒有真正安全的,也沒有優雅的方式來做到這一點...

<?php 
switch($_GET['type']){ 
case "1": 
    $image = "image1.png"; 
    break; 
case "2": 
    $image = "image2.png"; 
    break; 
case "3": 
    $image = "image3.png"; 
    break; 
} 
header('Content-Type: image/png'); 
readfile($image); 
?> 

這個故事的寓意是:用頭()和ReadFile的()= d

2

我沒有測試以下,但它應該工作。使用此腳本獲取將包含圖像數據的PHP代碼。

要獲取圖像:

$image = base64_encode(file_get_contents("image.png")); 
// The string $image now contains your image data. 

獲取你的代碼,你想這個圖片的(潛在的巨大)的字符串,每個圖像。打印並複製並粘貼。通過網絡將其作爲文本文件導入。這取決於你。

然後,打印圖像(僅圖像彷彿PHP腳本爲圖像),這樣做:

header("content-type: image/png"); 
print base64_decode($image); 

當然,你可以把每個圖像數據在陣列或類似的東西。

讓我知道它是否有效。

+0

它的工作原理。首先,我用newdoc語法嘗試過它,它也起作用,但這種解決方案更好。 – doc 2010-09-25 22:32:48

+0

謝謝,doc。我很高興它的工作。 – eje211 2010-09-25 22:51:59