這個問題在提及lib或包含提供功能庫之前已經被詢問過了,但是我想從頭創建一個。所以以下如何從頭開始創建一個基於PHP/MySQL的圖像庫?
- 畫廊任何想法需要使用表和瀏覽上傳(這個我找不到任何問題,只需要它在那裏勾勒步驟)
- 需要有一個縮略圖創建當一個文件上傳。
- 究竟應該如何在數據庫中的結構,例如存儲在數據庫作爲圖像或文件名
質量要求
- 只有PHP和MySQL
任何想法?請讓我知道,如果它不能做,以及:d
感謝
這個問題在提及lib或包含提供功能庫之前已經被詢問過了,但是我想從頭創建一個。所以以下如何從頭開始創建一個基於PHP/MySQL的圖像庫?
質量要求
任何想法?請讓我知道,如果它不能做,以及:d
感謝
我要去嘗試回答您的問題:
那部分其實很簡單。要創建文件上傳表單,您的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";
}
}
要創建一個縮略圖,你可以使用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
}
這裏有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
。
你幾乎肯定會要存儲在文件系統中的圖像,然後剛纔提到在數據庫條目中的文件名\路徑 - 它保持你的查詢結果的大小,特別是如果你想拉多個圖像的信息。如果您想使用它來創建縮略圖,它還可以更容易地調用imagemagick之類的東西。
是否ImageMagick的支持PHP? – 2009-08-05 01:35:07
http://us.php.net/imagick – Amber 2009-08-05 02:35:40
我說得對,插入查詢數據類型是TEXT? – 2009-08-05 01:37:21