Php 如何显示Blob数据的缩略图

Php 如何显示Blob数据的缩略图,php,mysql,upload,blob,thumbnails,Php,Mysql,Upload,Blob,Thumbnails,我是php新手,我正在尝试建立一个照片网站。我已经设法使上传功能正常工作,将其作为blob发送到数据库,并使用自定义url显示它。现在,我想检索这个blob数据并自动为其制作一个缩略图。不幸的是,我只看到画布格式的黑色背景和我指定的宽度和高度。有人能给我指出正确的方向吗 get_thumb_function.php: // db_connect include 'databaseconnection.php'; // get id $id = $_GET['id']; // select i

我是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
?>
首先,在数据库中存储图像是个坏主意。文件系统更擅长处理文件,因为它是一个文件系统。它的服务速度也更快,因为web服务器不必处理PHP请求,但可以直接输出文件的内容。这叫做服务静态文件,请用谷歌搜索并阅读。只需将它们存储在文件系统中,并将文件名保存在数据库中即可。然后可以将其用作img标记的src参数的图像URL的基础

其次,每次请求时生成缩略图是个坏主意。只需生成一次,将结果按所述存储在文件系统中,并在需要时提供服务,效率会更高。记住,在服务器负载和页面加载方面,为静态文件提供服务要比为PHP请求提供服务快得多

由于这两个建议,我对回答这个问题很犹豫。然而,我觉得给了你这些建议,你可以自己决定是否继续走这条路是正确的选择

你需要仔细阅读这个函数。它不会返回图像数据。当您将null作为第二个参数时,文件将被直接回显。这是您想要的,因此删除最后一行echo$thumb;足够解决这个问题了。$thumb变量可以被释放,除非您想检查函数调用是否成功,这在调试脚本时可能很有用

至于为什么不显示调整大小的图像,您需要确保检索到的图像数据是有效的echo$内容;在头调用之后直接在同一脚本中,在头调用之后直接退出,并且它是JPEG图像。当所有这些都排序后,给出结果,因为没有这些信息就无法确定脚本是否正确

最后,请不要忽视我的前两个建议,因为这些都是公认的良好实践