2010-05-29 58 views

回答

0

所以,你正在存儲圖像文件的二進制內容在你的數據庫(可能是一個BLOB字段),對不對?

顯示原始大小圖像並不是什麼大問題,我希望你已經存儲了原始圖像的文件名/文件擴展名(或至少是MIME類型)以及二進制數據。

如果你的表images e。 G。包含兩個,content持有二進制數據和file_name持有的文件名和文件擴展存儲的圖像,你可以認爲這樣的代碼:

$res = mysql_query("select * from images"); 

while($row = mysql_fetch_assoc($res)) { 
    $pathname = 'some/path/' . $row['file_name']; 
    file_put_contents($pathname, $row['content']); 
} 

這樣做是從images選擇表中所有條目並將數據庫中的二進制內容寫入以orignal映像命名的outfile。根據您的服務器設置,考慮在寫入outfile之後設置[chmod][1]

如果您沒有可用的文件名屬性,那麼您必須生成一些隨機的名稱(可能使用md5($row['content'])?可能會非常慢)。但是你需要原來的文件擴展名或存儲的圖像的MIME類型,否則其不容易發現,如果圖像是abc.JPGabc.PNGabc.GIF

現在,您可以訪問您創建的圖像(如XYZ.jpg)使用http://www.domain.com/some/path/XYZ.jpg如果some/path/位於您的文檔根文件夾中。

隨着原始圖像存儲在磁盤上,很容易創建一個縮略圖。我衷心推薦Imagemagick(檢查是否安裝在您的服務器上),但您也可以使用與PHP捆綁在一起的PHPs GDLib推出自己的縮略圖腳本,並且很可能會提供。已經有很多PHP預建的縮略圖腳本依賴於Imagemagick和/或GDLib。我還沒有嘗試,但聽到關於phpThumb()好東西。

最後一句話:您可能已經注意到了,將圖像作爲二進制數據存儲在數據庫中並不是一個好主意。當然,如果應用程序已經構建好了,而且你必須按照它們的方式來處理事情,那麼你就沒有選擇。但在性能方面,將數據庫路徑名和一些元數據(比如文件大小,寬度,高度等)一起存儲在數據庫中會更好,可以減小數據庫的大小,並使用select/php代碼快速處理結果集。

-2

使用php以高質量顯示圖像(縮略圖和原始尺寸圖像)的最佳方式是將原始圖像和縮略圖存儲在文件系統中,然後生成一個<img>標記以顯示它。

相關問題