我是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
?>
答案 0 :(得分:0)
首先,将图像存储在数据库中是一个坏主意。文件系统在处理文件方面更好(因为它是文件系统)。它的服务速度也更快,因为Web服务器不必处理PHP请求,但可以直接输出文件的内容。它被称为“提供静态文件”,请谷歌并阅读它。只需将它们存储在文件系统中,并将文件名保存在数据库中。然后,它可以用作img标记的src参数的图像URL的基础。
其次,每次请求时生成缩略图都是个坏主意。生成它一次,存储结果(如上所述,最好在文件系统上)并在需要时提供服务效率更高。在服务器负载和页面加载方面要好得多(提供静态文件比提供PHP请求更快,请记住)。
由于这两个建议,我对回答这个问题非常犹豫。但是,我觉得如果你仍然追求这条路线,那么你可以自己决定这些建议是正确的选择。
您需要阅读imagejpeg()
功能。它不返回图像数据。当您将null
作为第二个参数时,文件将直接回显。这就是你想要的,所以删除最后一行(echo $thumb;
)足以解决这个问题。然后可以处理$thumb
变量,除非您想检查函数调用是否成功(事实上,这可能对调试脚本有用)。
至于为什么未显示已调整大小的图像,您需要确保检索到的图像数据有效(echo $content;
在header()
调用之后直接在同一脚本中{它是一个JPEG图像。当这些都被排序后,给出结果,因为如果没有这些信息,就无法确定脚本是否正确。
最后,请不要忽视我的两个第一个建议,因为这些建议通常被认为是良好做法。