PHP数据库存储与管理图片技术 (php 数据库image)
影像资料的存取与管理,是当今资讯科技中极具挑战性的问题,也是绝大多数数据资料时常被忽略的重要问题之一。不过在一些涉及图像处理的网站和应用程序中,却有着对数据资讯保密性及速度限制等方面的特殊需求,它们在处理传递过来的图片数据时,必须具备高效的数据库存取技术,才能完成对影像数据的存储与管理。
在诸如博客、电商等应用中,在检索、分类、评估商品等业务流程中,图片占有重要的位置。针对此类需求,PHP 数据库存储与管理图片技术的应用显得尤为重要。相比于一般的文件存储的方式,数据库方式存储能够大大的提高图片在业务处理流程中的性能和可靠性,同时还能够更好的保护图片数据的安全和完整性。
一、PHP数据库存储图片技术的原理
PHP存储图片的过程,可以分为两部分:
1.保存图片到指定位置。
2.将该图片的相关路径或地址存储到数据库当中。
这里借助 PHP 的相关函数与数据库存储技术,完成整个过程。
1.保存图片到指定位置
在 PHP 中,file_put_contents() 函数可以将可变内容存储到文件中,这个函数使用起来非常方便,可以轻松而直接的将文件保存到指定目录。具体代码如下:
$path = ‘./images/’;//文件存储路径
$file_name = time().”.jpg”;//文件名
$binary_data = file_get_contents(‘php://input’);//二进制数据
if(!file_exists($path)){
mkdir($path,0777,true);//递归创建目录
}
file_put_contents($path.$file_name,$binary_data);//保存文件
这里,利用 file_get_contents() 函数从 php://input 获取二进制数据,再将其用 file_put_contents() 函数将其保存至指定目录下的文件(文件名采用时间戳),完成保存过程。
2.将该图片的相关路径或地址存储到数据库当中
将图片存储到指定位置后,就需要将其相关路径或地址存储到数据库当中,便于在后续的操作中快速的调用该图片。当然,使用何种数据库存储方式也是一个需要关注的问题。在实际应用中,可以采用关系型数据库MySQL或Oracle,以及非关系型数据库MongoDB等数据库管理系统,让我们看看其中的一种关系型数据库的应用实例。
我们可以先设计一个表,用于存储图片数据相关的属性字段,如存储路径、大小、格式、创建时间等等。例如:
CREATE TABLE `image` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键ID’,
`image_name` varchar(100) NOT NULL COMMENT ‘图片名称’,
`image_path` varchar(200) NOT NULL COMMENT ‘图片路径’,
`image_size` varchar(100) NOT NULL COMMENT ‘图片大小’,
`image_type` varchar(50) NOT NULL COMMENT ‘图片类型’,
`create_time` datetime NOT NULL COMMENT ‘创建时间’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’图片信息表’;
在存储图片时,通过相关的函数和工具,将这些属性字段,和保存路径进行相应的存储。
具体代码如下:
$image_path = ‘2023/05/13/20230513132610.jpg’;//图片存储路径
$image_name = ‘20230513132610.jpg’;//图片名称
$image_size = ‘36.17KB’;//图片大小
$image_type = ‘JPEG’;//图片类型(扩展名)
$create_time = date(‘Y-m-d H:i:s’);//创建时间
// 连接数据库
$conn = mysqli_connect($host,$user,$password,$database) or die(“连接数据库失败!”);
mysqli_set_charset($conn,$charset);//设置的字符集
$sql = “INSERT INTO image(image_name,image_path,image_size,image_type,create_time) VALUES(‘”.$image_name.”‘,'”.$image_path.”‘,'”.$image_size.”‘,'”.$image_type.”‘,'”.$create_time.”‘)”;
$mysqli_query($conn,$sql);
完成这个操作后,图片数据就已经被成功保存在数据库中了。
二、PHP管理图片技术的实现
PHP能够很好的帮助我们完成图片存储的功能,那么如何来管理和查询图片数据呢?
1.图片的分类和检索
针对不同用户的需求,我们可以按不同的分组方式,为图片进行分类。例如:按上传用户分组,按照业务分类,也可以根据图片的标签信息来分类,这样有利于后续的检索和查询。
在文件存储的情况下,用户通过输入名称或者相关的关键词,用 opendir() 函数获取指定路径下所有文件,然后进行相关的筛选和搜索。
但在数据库存储的情况下,我们可以根据图片信息表中的字段属性,动态生成查询条件,利用 SQL 语句进行相关的筛选和搜索操作。例如:
//根据用户名查询
$sql = “SELECT * FROM image WHERE username = ‘.$username.’ order by create_time DESC”;
//根据图片大小查询
$sql = “SELECT * FROM image WHERE image_size >= ‘.$size1.’ and image_size
//根据上传时间查询
$sql = “SELECT * FROM image WHERE create_time >= ‘.$begin_time.’ and create_time
通过上述的语句查询出来的所有符合条件的记录,就能满足我们对于图片分类和检索的相关需求。
2.图片的压缩和处理
PHP GD库可以通过相关的函数进行图片处理和压缩。通过 imagecreatefromjpeg() 函数,可以讲JPEG格式的图片压缩为指定大小的文件,并将其保存到指定目录。同时,还可以通过 imagecopyresized() 函数,将指定大小的图片复制到缩略图中,方便在列表展示和查询结果展示页面中使用。例如:
// 图像大小
$max_width = 928;
$max_height = 410;
//缩略图大小
$thumb_width = 248;
$thumb_height = 118;
// 打开源图像
$src_image = imagecreatefromjpeg($image_path);
// 求出缩放比例
$width_ratio = $max_width / imagesx($src_image);
$height_ratio = $max_height / imagesy($src_image);
$ratio = min($width_ratio, $height_ratio);
// 计算缩略图在目标图像中的位置
$x_center = ($max_width – $ratio * imagesx($src_image)) / 2;
$y_center = ($max_height – $ratio * imagesy($src_image)) / 2;
// 新建一个缩略图像
$dst_image = imagecreatetruecolor($max_width, $max_height);
// 填白色背景
$white = imagecolorallocate($dst_image,255,255,255);
imagefill($dst_image,0,0,$white);
// 将源图缩放并复制到目标缩略图像中
imagecopyresampled($dst_image, $src_image, $x_center, $y_center,0, 0, $ratio * imagesx($src_image), $ratio * imagesy($src_image),imagesx($src_image), imagesy($src_image));
// 保存目标图像
imagejpeg($dst_image,$new_path);
在这里,只要简单的添加和调节相应的参数,就能够实现不同的效果。
三、
,在当今越来越多的业务场景中得到了广泛的应用。通过上述讲解,我们了解了这种技术的原理与实现方法,以及如何进行相关的操作和管理。在实际应用中,任何技术方案,都需要根据实际情况进行适度的选择和调整,才能够落地可行,进一步推动系统性能的优化和提升。