Как создать галерею изображений на основе PHP / MySQL с нуля? - PullRequest
1 голос
/ 05 августа 2009

Этот вопрос задавался перед упоминанием библиотеки lib или include, которая предоставляет функциональную галерею, но я хочу создать ее с нуля. Так что любые идеи о следующем

  1. Галереи должны быть загружены с помощью формы и просмотра (это я не могу найти проблемы, просто нужно, чтобы она была там, чтобы наметить шаги)
  2. Необходимо создать эскиз изображения при загрузке файла.
  3. Как это должно быть структурировано в базе данных, например, храниться в БД как изображение или имя файла
1010 * * * ТРЕБОВАНИЯ 1011 *
  • Только PHP и MySql

Есть идеи? Пожалуйста, дайте мне знать, если это нельзя сделать также: D

Спасибо

Ответы [ 3 ]

6 голосов
/ 05 августа 2009

Я попытаюсь ответить на ваши вопросы:


Вопрос 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.

2 голосов
/ 05 августа 2009
0 голосов
/ 05 августа 2009

Вы почти наверняка захотите сохранить изображения в файловой системе, а затем просто сослаться на имя файла \ путь в записи БД - это снизит размеры вашего запроса, особенно если вы хотите получить информацию для нескольких изображений , Это также упрощает вызов таких вещей, как imagemagick, если вы хотите использовать это для создания миниатюр.

...