2009-08-05 56 views
1

這個問題在提及lib或包含提供功能庫之前已經被詢問過了,但是我想從頭創建一個。所以以下如何從頭開始創建一個基於PHP/MySQL的圖像庫?

  1. 畫廊任何想法需要使用表和瀏覽上傳(這個我找不到任何問題,只需要它在那裏勾勒步驟)
  2. 需要有一個縮略圖創建當一個文件上傳。
  3. 究竟應該如何在數據庫中的結構,例如存儲在數據庫作爲圖像或文件名

質量要求

  • 只有PHP和MySQL

任何想法?請讓我知道,如果它不能做,以及:d

感謝

回答

6

我要去嘗試回答您的問題:


問題1

那部分其實很簡單。要創建文件上傳表單,您的HTML需要看起來像:

<form enctype='multipart/form-data' action='CodeTool.php' method='POST'> 
    File: <input name='picture' type='file'/> 
    <input type='submit' value='Upload'/> 
</form> 

你的形式需要有enctype='multipart/form-data'method必須POST。然後,要閱讀上傳文件,您可以簡單地使用以下內容。我還添加了一些基本的驗證,以確保該文件是一個圖像。

if(isset($_FILES['picture'])) { 
    echo "File has been uploaded under temp file " . $_FILES['picture']['tmp_name']; 

    // Let's check if the file is an image: 
    $fileData = file_get_contents($_FILES['picture']['tmp_name']); 

    // Using imagecreatefromstring, that way you don't need to 
    // guess the image format. 

    if(($img = @imagecreatefromstring($fileData)) !== FALSE) { 
     echo " and is a valid image"; 
    } else { 
     echo " and is not a valid image"; 
    } 
} 

問題2

要創建一個縮略圖,你可以使用GD(或ImageMagick的,但不包括在默認配置)這樣......讓我們從imagecreatefromstring繼續if聲明:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) { 
    // Let's create a 100x100 thumbnail 
    $width = imagesx($img); 
    $height = imagesy($img); 

    $boxSize = min($width,$height); 
    $boxX = ($width/2) - ($boxSize/2); 
    $boxY = ($height/2) - ($boxSize/2); 

    $thumb = imagecreatetruecolor(100, 100); 
    imagecopyresampled($thumb, $img, 0, 0, $boxX, $boxY, 100, 100, $boxSize, $boxSize); 

    //$thumb is now a 100x100 thumbnail 
} 

問題3

這裏有2個選項。您可以將圖像存儲在文件系統或數據庫中。儲存您的圖片在文件系統中,你可以做到以下幾點:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) { 
    move_uploaded_file($_FILES['picture']['tmp_file'], 'somefile.jpg'); 
    // the code from the previous example 
    imagejpeg($thumb, 'somefile_thumb.jpg'); 
} 

我個人比較喜歡使用數據庫來存儲圖像,因爲它是更容易保持參照完整性,使備份更簡單(備份數據庫和你完成)。這有點慢,但差別並不大:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) { 
    // the code from the previous example 

    $tmp_thumb = tempnam(sys_get_temp_dir(), 'thumb'); 
    imagejpeg($thumb, $tmp_thumb); 

    $thumbData = file_get_contents($tmp_thumb); 

    mysql_query("INSERT INTO images (original, thumb) VALUES ('" . mysql_real_escape_string($fileData) . "', '" . mysql_real_escape_string($thumbData) . "');"); 
} 

這些字段需要是BLOB

+0

我說得對,插入查詢數據類型是TEXT? – 2009-08-05 01:37:21

0

你幾乎肯定會要存儲在文件系統中的圖像,然後剛纔提到在數據庫條目中的文件名\路徑 - 它保持你的查詢結果的大小,特別是如果你想拉多個圖像的信息。如果您想使用它來創建縮略圖,它還可以更容易地調用imagemagick之類的東西。

+0

是否ImageMagick的支持PHP? – 2009-08-05 01:35:07

+1

http://us.php.net/imagick – Amber 2009-08-05 02:35:40