检索数据库时如何压缩Blob图像?

时间:2019-10-05 18:04:07

标签: php mysql image compression

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

<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" /> ';
?>

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

1 个答案:

答案 0 :(得分:1)

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

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

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

MySQL是操纵文本的好手,但是二进制数据的大斑点却是另一回事。您还应该问自己,将图像存储在数据库中会得到什么。

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

我也强烈建议您研究MySQL的预准备语句。 https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

这使您可以使用以下查询:

INSERT INTO images_tbl(image) VALUES(?)

问号表示一个变量,您可以使用单独的函数以二进制形式将其传递给MySQL。这可以防止SQL注入攻击,而addlashes()绝对不会。

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