Как мне создать галерею изображений на базе PHP / MySQL с нуля?

StackOverflow https://stackoverflow.com/questions/1230701

  •  22-07-2019
  •  | 
  •  

Вопрос

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

  1. Галереи должны быть загружены с помощью формы и просмотра (это я могу найти без проблем, просто нужно, чтобы это было там, чтобы описать шаги)
  2. Необходимо, чтобы при загрузке файла создавался эскиз изображения.
  3. Как это должно быть структурировано в базе данных, например, сохранено в БД в виде изображения или имени файла

Требования

  • Только PHP и MySQL

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

Спасибо

Это было полезно?

Решение

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


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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top