Я новичок в php, и я пытаюсь создать фото-сайт. Мне удалось правильно загрузить функцию загрузки (отправить как blob в базу данных и отобразить ее с помощью настраиваемого URL-адреса). Теперь я хочу получить данные blob и автоматически сделать для них миниатюру. К сожалению, я вижу только формат холста с черным фоном с заданной шириной и высотой. Может ли кто-нибудь указать мне в правильном направлении?
get_thumb_function.php:
// db_connect include 'databaseconnection.php'; // get id $id = $_GET['id']; // select image from id $query = mysqli_query($db,"SELECT * FROM images WHERE id='$id'"); $rij = mysqli_fetch_array($query); // content image $content = $rij['image']; // get content type header('Content-type: image/jpg'); $filename = $content; // Get new dimensions list($width, $height) = getimagesize($filename); $new_width = 100; $new_height = 100; // Resample $image_p = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); // Output $thumb = imagejpeg($image_p, null, 100); echo $thumb;
Это сценарий, в котором я пытаюсь получить миниатюру. index.php
// Alle images uit de database $query = mysqli_query($db, "SELECT * FROM images LIMIT 0, 9"); // Maximaal 9 foto's //$id = $row['id']; while ($row = mysqli_fetch_assoc($query)) {?> <a href="image.php?id=<?php echo $row['id']; ?>"><img src="get_thumb_function.php?id=<?php echo $row['id']; ?>"></a> <?php }//endwhile ?>
Прежде всего, это плохая идея хранить изображения в базе данных . Файловая система лучше справляется с файлами (так как это файловая система). Он также быстрее работает, так как веб-сервер не должен обрабатывать PHP-запрос, но может напрямую выводить содержимое файла. Это называется «служением статическому файлу», пожалуйста, Google и прочитайте его. Просто сохраните их в файловой системе и сохраните имя файла в базе данных. Затем это можно использовать в качестве основы для URL-адреса изображения для параметра src тега img.
Во-вторых, это плохая идея генерировать миниатюру каждый раз, когда она запрашивается . Гораздо эффективнее генерировать его один раз, сохранять результат (как сказано, предпочтительнее в файловой системе) и обслуживать его при необходимости. Помните, гораздо лучше с точки зрения загрузки сервера и загрузки страницы (быстрее обслуживать статический файл, чем обслуживать PHP-запрос).
Из-за этих двух предложений я совершенно не решаюсь ответить на этот вопрос. Тем не менее, я чувствую, что, давая вам эти предложения, вы можете решить для себя, если все еще преследовать этот маршрут является правильным выбором.
Вам нужно прочитать функцию imagejpeg()
. Он не возвращает данные изображения. Поскольку вы даете null
в качестве второго аргумента, файл будет отображаться непосредственно. Это то, что вы хотите, поэтому удаление последней строки ( echo $thumb;
) достаточно для решения этой проблемы. Затем переменную $thumb
можно удалить, если вы не хотите проверить, был ли вызов функции успешным или нет (что, по сути, может быть полезно при отладке скрипта).
Что касается того, почему изображение с измененным размером не отображается, вам необходимо убедиться, что полученные данные изображения действительны ( echo $content;
в том же скрипте непосредственно после вызова header()
, выходя непосредственно после него) и что это изображение в формате JPEG , Когда все это отсортировано, дайте результаты, потому что невозможно определить, правильно ли скрипт без этой информации.
Наконец, пожалуйста, не игнорируйте мои два первых предложения, так как они, как правило, считаются хорошей практикой.