检索到数据库时如何压缩 blob 图像?
How can I compress blob image when retrieving to database?
我使用以下代码将图像上传到我的数据库中:
<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" /> ';
?>
当我上传大图片时,它会加载原始文件大小。我想优化我的网站。当我将图像检索到数据库时,有什么方法可以压缩图像,以便更快地加载到网站上吗?
我建议不要将图像添加到数据库中。至少不是 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 注入攻击,而 addslashes() 绝对不会。
我使用以下代码将图像上传到我的数据库中:
<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" /> ';
?>
当我上传大图片时,它会加载原始文件大小。我想优化我的网站。当我将图像检索到数据库时,有什么方法可以压缩图像,以便更快地加载到网站上吗?
我建议不要将图像添加到数据库中。至少不是 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 注入攻击,而 addslashes() 绝对不会。