gpt4 book ai didi

php - 如何显示 Blob 数据的缩略图

转载 作者:行者123 更新时间:2023-11-30 00:24:55 25 4
gpt4 key购买 nike

我是 php 新手,我正在尝试构建一个照片网站。我已经设法让上传功能正常工作(作为 blob 发送到数据库并使用自定义 url 显示它)。现在,我想检索此 blob 数据并自动为其制作缩略图。不幸的是,我只看到带有黑色背景的 Canvas 格式以及我指定的宽度和高度。有人能指出我正确的方向吗?

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;

这是我尝试检索缩略图的脚本。索引.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 请求更快)。

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

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

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

最后,请不要忽视我的前两个建议,因为这些建议被普遍认为是良好的做法。

关于php - 如何显示 Blob 数据的缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22962042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com