【问题标题】:How can I compress blob image when retrieving to database?检索到数据库时如何压缩 blob 图像?
【发布时间】:2019-10-05 18:04:07
【问题描述】:

我正在使用以下代码将图像上传到我的数据库中:

<form>
<input type="file" name="image">
<input type="submit name="upload">
</form>
<?php
$mysqli=new mysqli("localhost","root","","mydb");

  if (isset($_POST['upload'])) {
    $photo = addslashes(file_get_contents($_FILES["image"]["tmp_name"]));

    $result=$mysqli->query("INSERT INTO images_tbl(image) VALUES('$photo')");

?>

并以这种方式检索照片:

<?php
$result=$mysqli->query("SELECT image FROM image_tbl");
    while ($test=mysqli_fetch_array($result)) {
        $getphoto = $test['image'];
    }
     echo'<img src="data:image/jpeg;base64,'.base64_encode($getphoto).'" style="width: 40px; 40px;" class="w3-round" draggable="false" /> ';
?>

当我上传大图像时,它会加载原始文件大小。我想优化我的网站。当我将图像检索到数据库时,有什么方法可以压缩图像,以便更快地加载到网站?

【问题讨论】:

  • 将图像存储在我的数据库中。并使用 base64_encode($image) 检索它
  • 我明白了。我使用它是因为它的工作原理。我使用该代码将图像上传到我的数据库。我也可以找回它。这就是我使用它的原因。我只想知道当我将图像检索到数据库时是否有压缩图像的方法。但是你说它已经过时了。所以也许,我会改变我将图像上传到数据库的方式
  • 让我说清楚,这个函数不做任何与数据库相关的事情。它只是在字符串中的每个 '" 前面添加斜杠。您还没有向我们展示将文件添加到数据库的代码。你没有解释你想如何压缩图像或为什么。 JPEG 压缩是您正在寻找的吗?压缩包?也许是完全不同的东西。请清楚您的要求并向我们展示您的尝试。我们很乐意提供帮助,但这里没有足够的信息让我们甚至无法猜测您在做什么。
  • 我很抱歉。我尽我所能编辑它。

标签: php mysql image compression


【解决方案1】:

我建议不要将图像添加到数据库中。至少不是 MySQL 数据库。 相反,尝试将图像存储在文件系统中,并且仅将文件系统路径存储在数据库中。 考虑将文件重命名为长且唯一的随机名称,并将其与原始文件名一起存储在数据库中。

使用 PHP,您可以使用原始名称提供文件:

header('Content-Type: image/jpeg');
header('Content-disposition: attachment; filename="'.$filenameOriginal."\n");
readfile($filenameStorage);

MySQL 擅长处理文本,但大量二进制数据是另一回事。您还应该问自己,通过将图像存储在数据库中可以获得什么。

关于压缩。图像通常被很好地压缩,因此进一步压缩它们以用于数据库存储通常是不可行的。

我还强烈建议您查看 MySQL 的 Prepared Statements。 https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

这允许您使用以下查询:

INSERT INTO images_tbl(image) VALUES(?)

问号表示一个变量,您将其作为具有单独函数的二进制文件传递给 MySQL。这可以防止 addlashes() 绝对不会的 SQL 注入攻击。

https://www.php.net/manual/en/mysqli-stmt.bind-param.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 2018-11-19
    • 2014-02-19
    • 2021-08-20
    • 2017-11-30
    • 2011-08-03
    • 2019-11-24
    相关资源
    最近更新 更多