图像数据存储技术
————————————————————————————————作者:————————————————————————————————日期:
1
图像数据存储技术
摘要:,将多媒体信息引入到系统当中,随着数据库应用技术的发展,已经成为人们对现代数据库应用系统的要求之一。本文通过对图像数据的不同存储方式的分析,提出在学生信息系统中以数据库方式存储学生照片的方法,并且使用VB 6.0 中的ADO 数据控件实现了图像数据入库操作及照片的浏览。
关键词:信息系统;图像;
概述:随着数据库应用技术的发展,将多媒体信息引入到系统当中,使管理系统功能更强大,界面更美观,信息更丰富,已经成为人们对现代数据库应用系统的要求之一。在学生信息系统中,除了需要将每一名学生的基本数据信息存入系统,还需要将该学生的照片以图像信息的形式存入系统。这样可以随时查看学生的照片,或用来制作学生证等证件,以提高证件的可信度并减少证件照片处理的工作量。
图像的数据量要远远大于数据库中存储的普通数据的数据量。因此,组织与管理好图像数据与数据库应用系统的结构、效率、安全性、完整性息息相关。本文给出了一种在学生信息系统中组织与管理图像信息的方法,并利用ADO 技术设计实现了图像信息的入库及浏览等操作。
1.存储图像数据的策略
1.1 以文件方式存储图像数据
图像信息通常是通过扫描或摄像的方法进入系统的,并且一般的多媒体系统中都采用文件形式存放数据。所以在数据库应用系统中,可以采用文件形式存放图像数据。首先,将每一幅图像组织成一个文件,众多的图像文件形成图像文件集。在学生基础信息表中设置一个存放照片图像文件物理文件名的字段(pFileName),在该字段中存放每一名学生照片文件的存储路径及文件名。这样就建立起了学生基础信息表与照片文件集之间的关联(如图1 所示)。
图1 学生基本信息表与照片文件集之间的关联
用该方法存储图像文件的优点是容易实现,编程过程中无须复杂编码,图像信息的引入也不会影响原主数据表(学生基本信息表)的访问效率。但这种图像存储方式的缺点也非常明显。按此方法构造的系统实质上是由数据库系统加上文件系统构成的综合应用系统,其性能从整体上讲已退化为文件系统,因此文件系统的所有缺陷都会在此系统中存在。文件系统的一个主要问题是安全没有保证,任何一个进入计算机系统的人都可以对文件进行各种处理,包括移动、修改甚至删除,而系统无法给予任何保护,系统的数据完整性也就无法得到保证。
1.2 以数据库方式组织图像数据
SQL Server 2000 是功能强大的关系数据库管理系统。它支持的数据类型多达27 种,其中ntext、text 和image 类型用于存储BLOB(Binary Large Object 二进制大对象)数据,在单个值中可以存储最大为2GB 的数据量。这一容量完全可以用于存放一张普通的照片。其中的image 类型是用于存储图像数据的理想类型。
然而由于图像数据的数据量很大,直接将图像数据引入到主数据表中,将会造成数据库中的主数据表尺寸过大,使系统对主数据表的访问效率降低,响应时间增长。因此,在系统设计中,将学生基本信息与其照片图像信息分别存放在两个表中,并在两个表之间建立相应的关联,实现主数据与图像数据物理上的分离和逻辑上的统一。这样一来,即可以实现以数据库形式管理图像数据,使图像数据享受到数据库管理系统提供的安全性、数据完整性等保护,同时也能够避免图像数据对主数据表的负面影响。
图2 数据表的设计
以下是在SQL Server 2000 中创建主数据表(SBase)和图像数据表(SPic)的方法。两表之间以学号(sNo)为公共字段,建立一对一联系。
CREATE TABLE SBase /* 创建学生基本信息表*/
(sNo char(4) NOT NULL, /* 学号字段非空*/
sName char(10) NULL, /* 学生姓名字段*/
sGender char(1) NULL, /* 学生性别字段*/
……
CONSTRAINT prim_sno1 PRIMARY KEY (sNo) /* 定义sNo 主键约束以及以sNo 为关键字的聚簇索引*/
)
GO
CREATE TABLE SPic /* 创建图像信息表*/
(sNo char(4) NOT NULL, /* 学号字段非空*/
sPhoto image NULL, /* 照片字段类型为image*/
CONSTRAINT prim_sno2 PRIMARY KEY(sNo), /* 定sSNo 主键约束以及以sNo 为关键字的聚簇索引*/
CONSTRAINT foreign_sno FOREIGN KEY(sNo)
REFERENCES SBase(sNo) /* 定义外键约束,实现参照完整性控制*/
)
GO
2.存取图像信息的方法
VB 6.0 是目前比较流行的应用系统开发工具之一。Microsoft在其VB 中加入了创建“健壮”的ActiveX 组件的能力。ActiveX 数据对象ADO 可以方便地实现对SQL Server 2000 数据库的存取等操作。
2.1 配置ODBC数据源
ODBC(Open Database Connectivity 开放式数据库连接)为使用不同的关系数据库提供了一个统一的程序设计接口。要使用ODBC,首先要配置一个数据源。数据源用来说明到哪儿可以找到应用程序所需要的数据库物理文件,以及使用哪一个ODBC 驱动程序来翻译API 调用。可以通过Windows “控制面板”中“管理工具”下的“数据源(ODBC)”来启动“ODBC 数据源管理器”,添加新数据源,并与SQLServer服务器中相应的数据库进行连接。
2.2 照片浏览的实现
在VB 中新建工程,并在窗体中添加一个ADO 控件,其名称为Adodc1。对该控件的属性进行配置。首先选择刚刚配置的数据源,并在记录源中使用以下SQL 语句连接主数据表和图像数据表,并选中其中的全部字段:SELECT*FROM SBase X,SPic Y WHERE X.sNo=Y.sNo
使用数据绑定控件Text 可以在窗体中显示数据表中的普通数据。使用Image 控件可以显示照片。在窗体中放置一个Image 控件,设置其DataSource属性值为Adodc1,其DataFeild 属性值为sPhoto,以实现在窗体中对照片的浏览。
2.3 图像数据入库的实现
虽然SQL Server 2000提供了Image类型来存放图像数据,但没有提供将图像数据写入相应字段中的方法。以下的程序设计可以将图像数据写入相应的字段。首先在窗体中放置一个CommonDialog 控件。为Image 控件的Click 事件添加代码,单击Image 控件时,通过CommonDialog 控件打开通用对话框,在该对话框中选中要添加到表中的照片图像,并将该图像的数据写入数据库。
Option Explicit
'API 声明部分,该函数的作用是将源内存块复制到指定的内存空间
Private Declare Sub CopyMemory Lib "kernel32" Alias "
RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'Image1 控件的单击事件,通用对话框选定照片文件
Private Sub Image1_Click()
With CommonDialog1
.DialogTitle = "文件选择"
.Filter = "点阵图(.bmp)|*.bmp|JPEG 图(.jpg)|*.jpg|全部文件(*.*)|*.
*"
.CancelError = True
.ShowOpen
'调用用户自定义过程将照片文件存储到数据库中
Set Image1.Picture = LoadPicture(.FileName)
Save Adodc1.Recordset, .FileName
End With
End Sub
'自定义过程,用于存储照片文件到数据库中
Sub Save(Rec As ADODB.Recordset, ByVal FileName As String)
Dim Length As Long, F As Integer
Dim i As Integer
Length = FileLen(FileName)
ReDim a1(Length + 12) As Byte, a2(Length) As Byte
a1(0) = &H6C: a1(1) = &H74
CopyMemory a1(4), Length, 4
F = FreeFile
Open FileName For Binary As #F
Get #F, , a2
Close #F
CopyMemory a1(8), a2(0), Length
Rec("sphoto").AppendChunk a1
End Sub
随着SQL Serve 数据库管理系统功能的不断增强、性能的不断完善,将各类数据完全交由数据库管理系统统一存储和管理,已成为技术发的趋势。只有这样,SQL Serve 数据库管理系统的强大功能才能得到充分发挥,数据的安全性才能得