相關(guān)資訊
- 《戰(zhàn)國(guó)無雙4-2》怎么換服裝?戰(zhàn)國(guó)無
- 關(guān)于責(zé)任的名言警句大全
- 《戰(zhàn)國(guó)無雙4-2》PC版如何聯(lián)機(jī)? 戰(zhàn)
- 戰(zhàn)國(guó)無雙4-2技能覺醒牛逼嗎 全新
- 《戰(zhàn)國(guó)無雙4-2》手柄無效怎么解決
- 戰(zhàn)國(guó)無雙4-2如何設(shè)置語言 戰(zhàn)國(guó)無雙
- 戰(zhàn)國(guó)無雙4-2怎么樣跳過進(jìn)入開場(chǎng)動(dòng)畫
- 什么是應(yīng)屆生畢業(yè)生
- 應(yīng)屆生簡(jiǎn)歷自我評(píng)價(jià)
- 應(yīng)屆生簡(jiǎn)歷怎么寫
本類常用軟件
-
福建農(nóng)村信用社手機(jī)銀行客戶端下載下載量:584204
-
Windows優(yōu)化大師下載量:416896
-
90美女秀(視頻聊天軟件)下載量:366961
-
廣西農(nóng)村信用社手機(jī)銀行客戶端下載下載量:365699
-
快播手機(jī)版下載量:325855
本文主要跟大家分享介紹的是ASP程序如何從access數(shù)據(jù)庫(kù)中讀取圖形,希望對(duì)大家有用。
如何從ACCESS數(shù)據(jù)庫(kù)中讀取images
1。ACCESS和FoxPro數(shù)據(jù)庫(kù)中的圖形格式
當(dāng)瀏覽器遇到一個(gè)<IMG>標(biāo)志時(shí),它會(huì)根據(jù)你設(shè)定的src屬性來下載文件。這可能是一個(gè)圖形文件或則是一個(gè)ASP頁(yè)面。如果是一個(gè)返回gif二進(jìn)制的ASP頁(yè)面,瀏覽器需要知道返回的是什么格式的圖形文件,因?yàn)檫@個(gè)原因,就需要指定content type,為image/gif,image/bmp,image/jpeg或則其他什么的。
Response.contentType = "image/gif"
但這會(huì)導(dǎo)致另外一個(gè)問題,那就是我們只能夠顯示gif格式的圖象,或則說保存在數(shù)據(jù)庫(kù)中的東西只能夠是gif格式的了。但是一些數(shù)據(jù)庫(kù)是使用gif格式保存的,但是另外一些則是使用jpeg格式保存的,甚至其他是采用OLE方式來保存圖形的。所以我們必須根據(jù)圖形的格式來設(shè)置response的content type.
注意的是你也可以從一個(gè)文件中新建一個(gè)位圖對(duì)象,但使用這樣的方式保存在數(shù)據(jù)庫(kù)中的圖形格式是瀏覽器不能夠識(shí)別的。當(dāng)你往數(shù)據(jù)庫(kù)中保存圖象時(shí),你應(yīng)該知道你需要使用什么格式來保存,你可以把文件中的每一個(gè)字節(jié)保存下來,或則通過ACCESS/Foxpro的把圖形保存為一個(gè)OLE格式。
你使用什么格式保存圖象決定了你在ASP中用什么格式來讀出圖形來。具體來說,如果你在ACCESS/FoxPro中將圖形保存為bmp,gif,jpeg(這個(gè)必須要使用到ACCESS/FoxPro的OLE對(duì)象,即使用ACCESS的插入對(duì)象對(duì)話框來完成),這是當(dāng)你使用image/bmp時(shí)瀏覽器是不能夠解釋的。
現(xiàn)在假設(shè)在數(shù)據(jù)庫(kù)中保存的是你所想要的圖形格式(GIF, JPEG, BMP, TIFF, 等)現(xiàn)在來看看要怎么把它們從數(shù)據(jù)庫(kù)中讀出來。
在ACCESS中使用了兩個(gè)關(guān)鍵的技術(shù)來保存圖形
1。使用了bmp格式
2。78個(gè)字節(jié)的文件頭
<%
response.Expires = 0
response.Buffer = True
response.Clear
response.contentType = "image/bmp"
%>
接著你要干的就是去掉那78個(gè)字節(jié)的OLE對(duì)象的文件頭。
<%
Const OLEHEADERSIZE = 78
nFieldSize = rs("photo").ActualSize
oleHeader = rs("photo").GetChunk(OLEHEADERSIZE)
imageBytes = rs("photo").GetChunk(nFieldSize - OLEHEADERSIZE)
Response.BinaryWrite imageBytes
%>
現(xiàn)在舉一個(gè)例子:
如果你要得到一個(gè)職工的信息,這段信息包括一個(gè)介紹和他的圖象。并且要同時(shí)顯示文字和圖形。代碼如下:(其中的theImg是一個(gè)代理頁(yè)面)
theImg.asp
<%
response.Expires = 0
response.Buffer = True
response.Clear
response.contentType = Session("ImageType")
response.BinaryWrite Session("ImageBytes")
Session("ImageType") = ""
Session("ImageBytes") = ""
response.End
%>
Function SetImageForDisplay(field, contentType)
OLEHEADERSIZE = 78
contentType = LCase(contentType)
select case contentType
case "gif", "jpeg", "bmp"
contentType = "image/" & contentType
bytes = field.value
case "ole"
contentType = "image/bmp"
nFieldSize = field.ActualSize
oleHeader = field.GetChunk(OLEHEADERSIZE)
bytes = field.GetChunk(nFieldSize - OLEHEADERSIZE)
end select
Session("imageBytes") = bytes
Session("imageType") = contentType
End Function
'注意的是,程序中只使用了4中格式:gif, jpeg, bmp , ole .
<%
sql = "select * from Employees"
Set oRS = Server.CreateObject("ADODB.Recordset")
oRS.CursorLocation = 3
oRS.Open sql, "DSN=NW"
SetImageForDisplay oRS("photo"), "ole"
Set oRS.ActiveConnection = Nothing
%>
要顯示圖象的話,只需要在另外一個(gè)asp中,假設(shè)為getEmpInfo.asp中
<img src="theImg.asp"</img>
但這還有一個(gè)問題,因?yàn)閷?duì)每個(gè)職工的圖形都使用了同一個(gè)"theImg.asp"文件,應(yīng)該再小小修改一下:
<img src="theImg.asp?temp=<%= Request.Form("empLastName")%>"</img>
最后再說一點(diǎn),如何顯示多幅圖象呢?也就是說如果數(shù)據(jù)庫(kù)中有多個(gè)字段都保存了圖形,怎么辦?其實(shí)解決辦法很簡(jiǎn)單,只要給SetImageForDisplay多加一個(gè)參數(shù)就是用來保存圖形的一個(gè)session變量。
例如:
SetImageForDisplay oRS1("photo"), "ole", "empPhoto"
SetImageForDisplay oRS2("logo"), "gif", "compLogo"
<img src="theImg2.asp?varName=empPhoto&temp=<%= Request.Form("empLastName")%>">
<img src="theImg2.asp?varName=compLogo&temp=<%= Request.Form("imgCode")%>">
使用這個(gè)方法能夠完成下面的功能:
1。能夠從數(shù)據(jù)庫(kù)中取出圖形字段。(你唯一需要知道的是數(shù)據(jù)庫(kù)中的圖形是什么格式bmp?gif?jpeg?ole?)
2.采用session變量 來保存圖形的字節(jié)數(shù)和content type,asp需要這些信息來聯(lián)結(jié)到<IMG>中的屬性
3。只要把theImg放到你想顯示圖形的地方,就能夠顯示圖象了。