如何显示Blob数据的缩略图

时间:2014-04-09 12:07:22

标签: php mysql upload blob thumbnails

我是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
?>

1 个答案:

答案 0 :(得分:0)

首先,将图像存储在数据库中是一个坏主意。文件系统在处理文件方面更好(因为它是文件系统)。它的服务速度也更快,因为Web服务器不必处理PHP请求,但可以直接输出文件的内容。它被称为“提供静态文件”,请谷歌并阅读它。只需将它们存储在文件系统中,并将文件名保存在数据库中。然后,它可以用作img标记的src参数的图像URL的基础。

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

由于这两个建议,我对回答这个问题非常犹豫。但是,我觉得如果你仍然追求这条路线,那么你可以自己决定这些建议是正确的选择。

您需要阅读imagejpeg()功能。它不返回图像数据。当您将null作为第二个参数时,文件将直接回显。这就是你想要的,所以删除最后一行(echo $thumb;)足以解决这个问题。然后可以处理$thumb变量,除非您想检查函数调用是否成功(事实上,这可能对调试脚本有用)。

至于为什么未显示已调整大小的图像,您需要确保检索到的图像数据有效(echo $content;header()调用之后直接在同一脚本中{它是一个JPEG图像。当这些都被排序后,给出结果,因为如果没有这些信息,就无法确定脚本是否正确。

最后,请不要忽视我的两个第一个建议,因为这些建议通常被认为是良好做法。