2010-06-16 67 views
5

我有一個網站當前在文件服務器上使用圖像。圖像顯示在用戶可以根據需要拖放每個頁面的頁面上。這是用jQuery完成的,圖像被包含在一個列表中。每個圖像是非常標準:Oracle Blob作爲img src在PHP頁面

<img src='//network_path/image.png' height='80px'> 

但是現在我需要引用存儲在Oracle數據庫中的BLOB的圖像(沒有這方面的選擇,所以不是一個值得討論)。我沒有問題,檢索BLOB和使用顯示在它自己的:

$sql = "SELECT image FROM images WHERE image_id = 123"; 
$stid = oci_parse($conn, $sql); 
oci_execute($stid); 
$row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS); 
$img = $row['IMAGE']->load(); 
header("Content-type: image/jpeg"); 
print $img; 

但我需要[有效]獲取圖像作爲img標籤的src屬性。我試過imagecreatefromstring(),但它只是在瀏覽器中返回圖像,忽略了其他html。我查看了數據uri,但IE8的大小限制規定了這一點。

所以現在我有點卡住了。我的搜索繼續使用src屬性來加載另一個包含圖像的頁面。但我需要圖像本身才能真正顯示在頁面上。 (注意:我說圖像,意思是至少有一個圖像,但在一頁上多達八個)。

任何幫助將不勝感激。

回答

7

那麼,你可以做幾件事情。你可以做一個網頁,將圖像渲染

<img src="image.php?id=123" /> 

這image.php頁面會有這樣的:

$sql = "SELECT image FROM images WHERE image_id = " . (int) $_GET['id']; 
$stid = oci_parse($conn, $sql); 
oci_execute($stid); 
$row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS); 
if (!$row) { 
    header('Status: 404 Not Found'); 
} else { 
    $img = $row['IMAGE']->load(); 
    header("Content-type: image/jpeg"); 
    print $img; 
} 

或者,您可以Base64編碼入SRC(注意,不是所有的瀏覽器處理這口井):

<img src="data:image/jpeg;base64,<?php echo base64_encode($img); ?>" /> 
+0

非常正確,謝謝。我最初嘗試過,並無法使其工作。問題不是這種方法,只是一個錯誤的變量名稱在腳本url中傳遞。 再次,謝謝。 – menkes 2010-06-16 21:24:05

3

正常的做法是使用<img src=/path/to/script?id=32>字段。它會顯示在頁面上而不是鏈接。這有什麼問題?你想將圖像數據嵌入到HTML中嗎?

爲了使效率更高,您可以實現某種類型的緩存,即將圖像數據寫入文件,如果發現它而不是再次查詢數據庫,則執行header(location...)。此外,應該設置browser caching headers,以便瀏覽器不會下載圖像(如果它已將其緩存到本地)。

1

你可以試試這個:

$img = $row['IMAGE']->load(); 
print('<img src="data:image/png;base64,'.base64_encode($img).'" />'); 
4

但我需要[有效]獲取圖像作爲img標籤的src屬性

正如Byron所說,接受並正確的方法是在獨立的圖像資源中輸出blob,並使用img標籤嵌入該圖像。這是唯一的好方法。您可以使用data: URIs但他們

  1. 養肥你的HTML代碼
  2. 沒有在IE < 8工作,並limited to 32 KB in IE 8
  3. 擴大了33%的數據量,並
  4. 帶走布勞爾的緩存圖像資源的可能性。

幾乎從來都不是一個好的選擇。

+0

對base64數據量增長+1。 – 2010-06-16 19:07:11

0
<?php 
if(isset($_POST['']))//get the id 
$roll_no=$_POST['']; 
$conn = oci_connect("", "", "");//DB connection 
$query = 'SELECT image FROM TABLE where id=:id'; 
$stmt = oci_parse ($conn, $query); 
oci_bind_by_name($stmt, ':id', $id); 
oci_execute($stmt); 
$arr = oci_fetch_array($stmt, OCI_ASSOC); 
$result = $arr['image']->load(); 
header("Content-type: image/JPEG"); 
echo $result; 
oci_close($conn); 
?> 
+0

最好給你解釋一下答案。 – 2016-06-15 13:30:17