如何从ACCESS数据库中读取图形(续) (1)
注重的是你也可以从一个文件中新建一个位图对象,但使用这样
的方式保存在数据库中的图形格式是浏览器不能够识别的。
当你往数据库中保存图象时,你应该知道你需要使用什么格式来保存
你可以把文件中的每一个字节保存下来,或则通过ACCESS/Foxpro的把图形保存
为一个OLE格式。
你使用什么格式保存图象决定了你在ASP中用什么格式来读出图形来。
具体来说,假如你在ACCESS/FoxPro中将图形保存为bmp,gif,jpeg(
这个必须要使用到ACCESS/FoxPro的OLE对象,即使用ACCESS的插入对象
对话框来完成),这是当你使用
image/bmp时浏览器是不能够解释的。
现在假设在数据库中保存的是你所想要的图形格式
(GIF, JPEG, BMP, TIFF, 等等等等)现在来看看要怎么把它们从
数据库中读出来。
在ACCESS中使用了两个要害的技术来保存图形
1。使用了bmp格式
2。78个字节的文件头
%26lt;%
response.Expires = 0
response.Buffer = True
response.Clear
response.contentType = %26quot;image/bmp%26quot;
%%26gt;
接着你要干的就是去掉那78个字节的OLE对象的文件头。
%26lt;%
Const OLEHEADERSIZE = 78
nFieldSize = rs(%26quot;photo%26quot;).ActualSize
oleHeader = rs(%26quot;photo%26quot;).GetChunk(OLEHEADERSIZE)
imageBytes = rs(%26quot;photo%26quot;).GetChunk(nFieldSize - OLEHEADERSIZE)
Response.BinaryWrite imageBytes
%%26gt;
现在举一个例子
假如你要得到一个职工的信息,这段信息包括一个介绍和他的图象。
并且要同时显示文字和图形。
代码如下(其中的theImg是一个代理页面)
theImg.asp
%26lt;%
response.Expires = 0
response.Buffer = True
response.Clear
response.contentType = Session(%26quot;ImageType%26quot;)
response.BinaryWrite Session(%26quot;ImageBytes%26quot;)
Session(%26quot;ImageType%26quot;) = %26quot;%26quot;
Session(%26quot;ImageBytes%26quot;) = %26quot;%26quot;
response.End
%%26gt;
Function SetImageForDisplay(field, contentType)
OLEHEADERSIZE = 78
contentType = LCase(contentType)
select case contentType
case %26quot;gif%26quot;, %26quot;jpeg%26quot;, %26quot;bmp%26quot;
contentType = %26quot;image/%26quot; %26amp; contentType
bytes = field.value
case %26quot;ole%26quot;
contentType = %26quot;image/bmp%26quot;
nFieldSize = field.ActualSize
oleHeader = field.GetChunk(OLEHEADERSIZE)
bytes = field.GetChunk(nFieldSize - OLEHEADERSIZE)
end select
Session(%26quot;imageBytes%26quot;) = bytes
Session(%26quot;imageType%26quot;) = contentType
End Function
'注重的是,程序中只使用了4中格式gif, jpeg, bmp , ole .
%26lt;%
sql = %26quot;select * from Employees%26quot;
Set oRS = Server.CreateObject(%26quot;ADODB.Recordset%26quot;)
oRS.CursorLocation = 3
oRS.Open sql, %26quot;DSN=NW%26quot;
SetImageForDisplay oRS(%26quot;photo%26quot;), %26quot;ole%26quot;
Set oRS.ActiveConnection = Nothing
%%26gt;
要显示图象的话,只需要在另外一个asp中,假设为getEmpInfo.asp中
%26lt;img src=%26quot;theImg.asp%26quot;%26lt;/img%26gt;
但这还有一个问题,因为对每个职工的图形都使用了同一个%26quot;theImg.asp%26quot;
文件,应该再小小修改一下
%26lt;img src=%26quot;theImg.asp?temp=%26lt;%= Request.Form(%26quot;empLastName%26quot;)%%26gt;%26quot;%26lt;/img%26gt;
最后再说一点,如何显示多幅图象呢?
也就是说假如数据库中有多个字段都保存了图形,怎么办?
其实解决办法很简单,只要给SetImageForDisplay多加一个参数
就是用来保存图形的一个session变量。
例如
SetImageForDisplay oRS1(%26quot;photo%26quot;), %26quot;ole%26quot;, %26quot;empPhoto%26quot;
SetImageForDisplay oRS2(%26quot;logo%26quot;), %26quot;gif%26quot;, %26quot;compLogo%26quot;
%26lt;img src=%26quot;theImg2.asp?varName=empPhoto%26amp;temp=%26lt;%= Request.Form(%26quot;empLastName%26quot;)%%26gt;%26quot;%26gt;
%26lt;img src=%26quot;theImg2.asp?varName=compLogo%26amp;temp=%26lt;%= Request.Form(%26quot;imgCode%26quot;)%%26gt;%26quot;%26gt;
使用这个方法能够完成下面的功能
1。能够从数据库中取出图形字段。(你唯一需要知道的是数据库中的图形是什么格式
bmp?gif?jpeg?ole?)
2.采用session变量 来保存图形的字节数和content type
asp需要这些信息来联结到%26lt;IMG%26gt;中的属性
3。只要把theImg放到你想显示图形的地方,就能够显示图象了。
的方式保存在数据库中的图形格式是浏览器不能够识别的。
当你往数据库中保存图象时,你应该知道你需要使用什么格式来保存
你可以把文件中的每一个字节保存下来,或则通过ACCESS/Foxpro的把图形保存
为一个OLE格式。
你使用什么格式保存图象决定了你在ASP中用什么格式来读出图形来。
具体来说,假如你在ACCESS/FoxPro中将图形保存为bmp,gif,jpeg(
这个必须要使用到ACCESS/FoxPro的OLE对象,即使用ACCESS的插入对象
对话框来完成),这是当你使用
image/bmp时浏览器是不能够解释的。
现在假设在数据库中保存的是你所想要的图形格式
(GIF, JPEG, BMP, TIFF, 等等等等)现在来看看要怎么把它们从
数据库中读出来。
在ACCESS中使用了两个要害的技术来保存图形
1。使用了bmp格式
2。78个字节的文件头
%26lt;%
response.Expires = 0
response.Buffer = True
response.Clear
response.contentType = %26quot;image/bmp%26quot;
%%26gt;
接着你要干的就是去掉那78个字节的OLE对象的文件头。
%26lt;%
Const OLEHEADERSIZE = 78
nFieldSize = rs(%26quot;photo%26quot;).ActualSize
oleHeader = rs(%26quot;photo%26quot;).GetChunk(OLEHEADERSIZE)
imageBytes = rs(%26quot;photo%26quot;).GetChunk(nFieldSize - OLEHEADERSIZE)
Response.BinaryWrite imageBytes
%%26gt;
现在举一个例子
假如你要得到一个职工的信息,这段信息包括一个介绍和他的图象。
并且要同时显示文字和图形。
代码如下(其中的theImg是一个代理页面)
theImg.asp
%26lt;%
response.Expires = 0
response.Buffer = True
response.Clear
response.contentType = Session(%26quot;ImageType%26quot;)
response.BinaryWrite Session(%26quot;ImageBytes%26quot;)
Session(%26quot;ImageType%26quot;) = %26quot;%26quot;
Session(%26quot;ImageBytes%26quot;) = %26quot;%26quot;
response.End
%%26gt;
Function SetImageForDisplay(field, contentType)
OLEHEADERSIZE = 78
contentType = LCase(contentType)
select case contentType
case %26quot;gif%26quot;, %26quot;jpeg%26quot;, %26quot;bmp%26quot;
contentType = %26quot;image/%26quot; %26amp; contentType
bytes = field.value
case %26quot;ole%26quot;
contentType = %26quot;image/bmp%26quot;
nFieldSize = field.ActualSize
oleHeader = field.GetChunk(OLEHEADERSIZE)
bytes = field.GetChunk(nFieldSize - OLEHEADERSIZE)
end select
Session(%26quot;imageBytes%26quot;) = bytes
Session(%26quot;imageType%26quot;) = contentType
End Function
'注重的是,程序中只使用了4中格式gif, jpeg, bmp , ole .
%26lt;%
sql = %26quot;select * from Employees%26quot;
Set oRS = Server.CreateObject(%26quot;ADODB.Recordset%26quot;)
oRS.CursorLocation = 3
oRS.Open sql, %26quot;DSN=NW%26quot;
SetImageForDisplay oRS(%26quot;photo%26quot;), %26quot;ole%26quot;
Set oRS.ActiveConnection = Nothing
%%26gt;
要显示图象的话,只需要在另外一个asp中,假设为getEmpInfo.asp中
%26lt;img src=%26quot;theImg.asp%26quot;%26lt;/img%26gt;
但这还有一个问题,因为对每个职工的图形都使用了同一个%26quot;theImg.asp%26quot;
文件,应该再小小修改一下
%26lt;img src=%26quot;theImg.asp?temp=%26lt;%= Request.Form(%26quot;empLastName%26quot;)%%26gt;%26quot;%26lt;/img%26gt;
最后再说一点,如何显示多幅图象呢?
也就是说假如数据库中有多个字段都保存了图形,怎么办?
其实解决办法很简单,只要给SetImageForDisplay多加一个参数
就是用来保存图形的一个session变量。
例如
SetImageForDisplay oRS1(%26quot;photo%26quot;), %26quot;ole%26quot;, %26quot;empPhoto%26quot;
SetImageForDisplay oRS2(%26quot;logo%26quot;), %26quot;gif%26quot;, %26quot;compLogo%26quot;
%26lt;img src=%26quot;theImg2.asp?varName=empPhoto%26amp;temp=%26lt;%= Request.Form(%26quot;empLastName%26quot;)%%26gt;%26quot;%26gt;
%26lt;img src=%26quot;theImg2.asp?varName=compLogo%26amp;temp=%26lt;%= Request.Form(%26quot;imgCode%26quot;)%%26gt;%26quot;%26gt;
使用这个方法能够完成下面的功能
1。能够从数据库中取出图形字段。(你唯一需要知道的是数据库中的图形是什么格式
bmp?gif?jpeg?ole?)
2.采用session变量 来保存图形的字节数和content type
asp需要这些信息来联结到%26lt;IMG%26gt;中的属性
3。只要把theImg放到你想显示图形的地方,就能够显示图象了。





