午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    如何實(shí)現(xiàn)asp無(wú)組件生成縮略圖
    來(lái)源:易賢網(wǎng) 閱讀:696 次 日期:2014-09-19 10:08:35
    溫馨提示:易賢網(wǎng)小編為您整理了“如何實(shí)現(xiàn)asp無(wú)組件生成縮略圖”,方便廣大網(wǎng)友查閱!

    網(wǎng)上有不少生成縮略圖的ASP組件。若你的虛擬空間不支持注冊(cè)新組件,可能會(huì)感覺(jué)自己的網(wǎng)站失色不少。心晴不才,結(jié)合網(wǎng)上資源寫了個(gè)無(wú)組件生成縮略圖程序,僅供參考。

    還是先看看基礎(chǔ)部分吧。首先,我們知道在頁(yè)面中顯示圖片是如下代碼:

    <img src="pic.gif" border="0" width="300" height="260">

    src是圖片路徑,border控制圖片邊緣寬度,width是圖片的長(zhǎng)度,height是圖片的高度??s略圖的生成其實(shí)就是在原始尺寸上縮放。但一般為了盡量少失真,我們都會(huì)按比例縮放。于是,獲取圖片的長(zhǎng)寬尺寸也就成了生成縮略圖的重點(diǎn)。

    下面便是編寫無(wú)組件生成縮略圖的步驟:

    1.無(wú)組件獲取圖片大小

    以前剛學(xué)ASP不久時(shí)看到過(guò)一篇利用ASCII碼實(shí)現(xiàn)無(wú)組件獲取圖片尺寸的文章。后來(lái)試了試,發(fā)現(xiàn)在獲取jpg類圖片尺寸時(shí)總是不能正確顯示,在網(wǎng)上查了查,居然有不少網(wǎng)站轉(zhuǎn)載這個(gè)程序,但沒(méi)有一家指出此程序的缺陷,也就更談不上解決缺陷的辦法了。后來(lái)又google了一下,終于找到了一篇介紹利用ADODB.stream獲取圖片尺寸的文章,按其介紹的方法,修改里面的代碼試了試,效果真的還不錯(cuò),現(xiàn)在將其拿出來(lái)與大家分享:

    利用ADODB.stream獲取圖片尺寸的通用類

    <%

    '//////////// GPS:Get Picture Size //////////////

    '//////////////利用ADODB.stream獲取圖片尺寸//////////////

    '/////////Cited By Leon(心晴) 2005年8月11日//////////

    Class GPS

    Dim aso

    Private Sub Class_Initialize

    Set aso=CreateObject("Adodb.Stream")

    aso.Mode=3

    aso.Type=1

    aso.Open

    End Sub

    Private Sub Class_Terminate

    set aso=nothing

    End Sub

    Private Function Bin2Str(Bin)

    Dim I, Str

    For I=1 to LenB(Bin)

    clow=MidB(Bin,I,1)

    if AscB(clow)<128 then

    Str = Str & Chr(ASCB(clow))

    Else

    I=I+1

    if I <= LenB(Bin) then Str = Str & Chr(ASCW(MidB(Bin,I,1)&clow))

    end If

    Next

    Bin2Str = Str

    End Function

    Private Function Num2Str(num,base,lens)

    'GPS (2005-8-11)

    dim ret

    ret = ""

    while(num>=base)

    ret = (num mod base) & ret

    num = (num - num mod base)/base

    wend

    Num2Str = right(string(lens,"0") & num & ret,lens)

    End Function

    Private Function Str2Num(str,base)

    'GPS (2005-8-11)

    dim ret

    ret = 0

    for i=1 to len(str)

    ret = ret *base + cint(mid(str,i,1))

    next

    Str2Num=ret

    End Function

    Private Function BinVal(bin)

    'GPS (2002-8-11)

    dim ret

    ret = 0

    for i = lenb(bin) to 1 step -1

    ret = ret *256 + ascb(midb(bin,i,1))

    next

    BinVal=ret

    End Function

    Private Function BinVal2(bin)

    'GPS (2002-8-11)

    dim ret

    ret = 0

    for i = 1 to lenb(bin)

    ret = ret *256 + ascb(midb(bin,i,1))

    next

    BinVal2=ret

    End Function

    '///以下是調(diào)用代碼///

    Function getImageSize(filespec)

    'GPS (2002-8-11)

    dim ret(3)

    aso.LoadFromFile(filespec)

    bFlag=aso.read(3)

    select case hex(binVal(bFlag))

    case "4E5089":

    aso.read(15)

    ret(0)="PNG"

    ret(1)=BinVal2(aso.read(2))

    aso.read(2)

    ret(2)=BinVal2(aso.read(2))

    case "464947":

    aso.read(3)

    ret(0)="GIF"

    ret(1)=BinVal(aso.read(2))

    ret(2)=BinVal(aso.read(2))

    case "535746":

    aso.read(5)

    binData=aso.Read(1)

    sConv=Num2Str(ascb(binData),2 ,8)

    nBits=Str2Num(left(sConv,5),2)

    sConv=mid(sConv,6)

    while(len(sConv)<nBits*4)

    binData=aso.Read(1)

    sConv=sConv&Num2Str(ascb(binData),2 ,8)

    wend

    ret(0)="SWF"

    ret(1)=int(abs(Str2Num(mid(sConv,1*nBits+1,nBits),2)-Str2Num(mid(sConv,0*nBits+1,nBits),2))/20)

    ret(2)=int(abs(Str2Num(mid(sConv,3*nBits+1,nBits),2)-Str2Num(mid(sConv,2*nBits+1,nBits),2))/20)

    case "FFD8FF":

    do

    do: p1=binVal(aso.Read(1)): loop while p1=255 and not aso.EOS

    if p1>191 and p1<196 then exit do else aso.read(binval2(aso.Read(2))-2)

    do:p1=binVal(aso.Read(1)):loop while p1<255 and not aso.EOS

    loop while true

    aso.Read(3)

    ret(0)="JPG"

    ret(2)=binval2(aso.Read(2))

    ret(1)=binval2(aso.Read(2))

    case else:

    if left(Bin2Str(bFlag),2)="BM" then

    aso.Read(15)

    ret(0)="BMP"

    ret(1)=binval(aso.Read(4))

    ret(2)=binval(aso.Read(4))

    else

    ret(0)=""

    end if

    end select

    ret(3)="width=""" & ret(1) &""" height="""

    & ret(2) &""""

    getimagesize=ret

    End Function

    End Class

    %>

    將以上代碼復(fù)制生成GPS.asp文件,這樣無(wú)組件獲取圖片尺寸的通用類就OK了。

    2.獲取圖片路徑

    由于不只一張圖片,以及圖片需分類存放,我們?cè)跀?shù)據(jù)庫(kù)中設(shè)計(jì)了一個(gè)存放圖片相對(duì)路徑的字段ImgURL。我們把上傳的圖片都放在一個(gè)名為images的文件夾中(至于如何無(wú)組件上傳圖片心晴就不在多說(shuō)了)?,F(xiàn)在我們先設(shè)計(jì)一個(gè)ShowImg.asp頁(yè)面用來(lái)顯示縮略圖及相關(guān)信息。具體設(shè)計(jì)如下:

    圖片:

    圖片格式:

    圖片尺寸:

    圖片大?。?/P>

    點(diǎn)擊次數(shù):

    下面,我們獲取圖片的絕對(duì)路徑。代碼如下:

    <%

    '/////獲取ShowImg.asp的絕對(duì)路徑/////

    Dim curFile

    curFile=Server.mappath(Request.servervariables("PATH_INFO"))

    Dim curfilename,filename

    '/////圖片相對(duì)路徑(存于數(shù)據(jù)庫(kù)中)

    cufilename=rs("ImgURL")

    '/////因?yàn)镾howImg.asp與images在同一目錄,所以我們用instrrev獲取images的路徑/////

    filename=left(curFile,instrrev(curFile,""))&cufilename

    '/////建立GPS類實(shí)體/////

    Dim GetPicSize

    Set GetPicSize=new GPS

    Set fs=Server.CreateObject("Scripting.FileSystemObject")

    '/////獲取圖片類型/////

    Dim PicSuffixName

    PicSuffixName=fs.GetExtensionName(filename)

    Dim PD '//Picture Dimension

    Dim PWidth,PHeight

    Select Case PicSuffixName

    Case "gif","bmp","jpg","png":

    '/////調(diào)用GPS通用類中的GetImageSize函數(shù)獲取圖片尺寸/////

    PD=GetPicSize.GetImageSize(filename)

    PWidth=PD(1) '//獲取圖片寬度

    PHeight=PD(2) '//獲取圖片高度

    Case "swf"

    PD=GetPicSize.GetImageSize(filename)

    PWidth=PD(1) '//獲取Flash寬度

    PHeight=PD(2) '//獲取Flash高度

    Case Else

    End Select

    Set fs=Nothing

    Set GetPicSize=Nothing

    %>

    將上面的代碼復(fù)制到<body>的上面就OK了!

    當(dāng)然,有人會(huì)說(shuō),獲取路徑不一定要用PATH_INFO,直接用server.mappath()不就可以了嘛,呵呵,蘿卜青菜各有所愛(ài),主要是我用PATH_INFO可以實(shí)現(xiàn)FSO的一些功能而用server.mappath()沒(méi)有搞定,所以一直使用這個(gè)。

    3.定義縮略圖尺寸

    這部分代碼就是仁者見(jiàn)仁,智者見(jiàn)智了。首先,我們需要規(guī)定縮略圖顯示尺寸范圍,譬如:300X260,代碼可以這樣寫:

    <%

    Dim PXWidth,PXHeight

    Dim Pp '//Proportion

    If PWidth=0 Or PWidth="" Then

    PXWidth=0

    PXHeight=0

    Else

    Pp=FormatNumber(PWidth/PHeight,2) '//長(zhǎng)寬比

    End If

    If PWidth>=PHeight Then

    If PWidth>=300 Then

    PXWidth=300

    PXHeight=FormatNumber(300/Pp,0)

    Else

    PXWidth=PWidth

    PXHeight=PHeight

    End If

    Else

    If PHeight>=260 Then

    PXHeight=260

    PXWidth=FormatNumber(260*Pp,0)

    Else

    PXWidth=PWidth

    PXHeight=PHeight

    End If

    End If

    %>

    將上面的代碼緊接第二步寫下即可。調(diào)用時(shí)代碼如下:

    <img src=<%=curfilename%> border="0" width=<%=PXWidth%>

    height=<%=PXHeight%>>

    至于圖片格式可以用得到,圖片尺寸可以寫成

    <%

    response.write PXWidth&"X"&PXHeight

    %>

    圖片大小可以用FSO.GetFileSize(filename)來(lái)實(shí)現(xiàn),而點(diǎn)擊次數(shù)可以簡(jiǎn)單地用SQL語(yǔ)句實(shí)現(xiàn),具體編碼就不再累述了。

    這樣,一個(gè)無(wú)組件生成縮略圖程序就寫好了,可能有點(diǎn)拿來(lái)主義,不過(guò)只要大家能將方法掌握相信還是有很大提高的。

    更多信息請(qǐng)查看IT技術(shù)專欄

    更多信息請(qǐng)查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:如何實(shí)現(xiàn)asp無(wú)組件生成縮略圖
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2025國(guó)考·省考課程試聽(tīng)報(bào)名

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)