如何实现asp无组件生成缩略图Word格式文档下载.docx
《如何实现asp无组件生成缩略图Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《如何实现asp无组件生成缩略图Word格式文档下载.docx(7页珍藏版)》请在冰点文库上搜索。
后来试了试,发觉在猎取jpg类图片尺寸时总是不能正确显示,在网上查了查,居然有不少网站转载这个程序,但没有一家指出此程序的缺陷,也就更谈不上解决缺陷的方法了。
后来又google了一下,最终找到了一篇介绍利用ADODB.stream猎取图片尺寸的文章,按其介绍的方法,修改里面的代码试了试,效果真的还不错,现在将其拿出来与大家分享:
利用ADODB.stream猎取图片尺寸的通用类
%
'
////////////GPS:
GetPictureSize//////////////
//////////////利用ADODB.stream猎取图片尺寸//////////////
/////////CitedByLeon(心晴)2021年8月11日//////////
ClassGPS
Dimaso
PrivateSubClass_Initialize
Setaso=CreateObject("
Adodb.Stream"
)
aso.Mode=3
aso.Type=1
aso.Open
EndSub
PrivateSubClass_Terminate
setaso=nothing
PrivateFunctionBin2Str(Bin)
DimI,Str
ForI=1toLenB(Bin)
clow=MidB(Bin,I,1)
ifAscB(clow)128then
Str=StrChr(ASCB(clow))
Else
I=I+1
ifI=LenB(Bin)thenStr=StrChr(ASCW(MidB(Bin,I,1)clow))
endIf
Next
Bin2Str=Str
EndFunction
PrivateFunctionNum2Str(num,base,lens)
GPS(2021-8-11)
dimret
ret="
"
while(num=base)
ret=(nummodbase)ret
num=(num-nummodbase)/base
wend
Num2Str=right(string(lens,"
)numret,lens)
PrivateFunctionStr2Num(str,base)
ret=0
fori=1tolen(str)
ret=ret*base+cint(mid(str,i,1))
next
Str2Num=ret
PrivateFunctionBinVal(bin)
fori=lenb(bin)to1step-1
ret=ret*256+ascb(midb(bin,i,1))
BinVal=ret
PrivateFunctionBinVal2(bin)
fori=1tolenb(bin)
BinVal2=ret
///以下是调用代码///
FunctiongetImageSize(filespec)
dimret(3)
aso.LoadFromFile(filespec)
bFlag=aso.read(3)
selectcasehex(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))
464947"
aso.read(3)
GIF"
ret
(1)=BinVal(aso.read
(2))
ret
(2)=BinVal(aso.read
(2))
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)
sConv=sConvNum2Str(ascb(binData),2,8)
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)
FFD8FF"
do
do:
p1=binVal(aso.Read
(1)):
loopwhilep1=255andnotaso.EOS
ifp1191andp1196thenexitdoelseaso.read(binval2(aso.Read
(2))-2)
p1=binVal(aso.Read
(1)):
loopwhilep1255andnotaso.EOS
loopwhiletrue
aso.Read(3)
JPG"
ret
(2)=binval2(aso.Read
(2))
ret
(1)=binval2(aso.Read
(2))
caseelse:
ifleft(Bin2Str(bFlag),2)="
BM"
then
aso.Read(15)
BMP"
ret
(1)=binval(aso.Read(4))
ret
(2)=binval(aso.Read(4))
else
endif
endselect
ret(3)="
width="
ret
(1)"
ret
(2)"
getimagesize=ret
EndClass
将以上代码复制生成GPS.asp文件,这样无组件猎取图片尺寸的通用类就OK了。
2.猎取图片路径
由于不只一张图片,以及图片需分类存放,我们在数据库中设计了一个存放图片相对路径的字段ImgURL。
我们把上传的图片都放在一个名为images的文件夹中(至于如何无组件上传图片心晴就不在多说了)。
现在我们先设计一个ShowImg.asp页面用来显示缩略图及相关信息。
具体设计如下:
图片:
图片格式:
图片尺寸:
图片大小:
点击次数:
下面,我们猎取图片的肯定路径。
代码如下:
/////猎取ShowImg.asp的肯定路径/////
DimcurFile
curFile=Server.mappath(Request.servervariables("
PATH_INFO"
))
Dimcurfilename,filename
/////图片相对路径(存于数据库中)
cufilename=rs("
ImgURL"
/////由于ShowImg.asp与images在同一名目,所以我们用instrrev猎取images的路径/////
filename=left(curFile,instrrev(curFile,"
))cufilename
/////建立GPS类实体/////
DimGetPicSize
SetGetPicSize=newGPS
Setfs=Server.CreateObject("
Scripting.FileSystemObject"
/////猎取图片类型/////
DimPicSuffixName
PicSuffixName=fs.GetExtensionName(filename)
DimPD'
//PictureDimension
DimPWidth,PHeight
SelectCasePicSuffixName
Case"
gif"
"
bmp"
jpg"
png"
/////调用GPS通用类中的GetImageSize函数猎取图片尺寸/////
PD=GetPicSize.GetImageSize(filename)
PWidth=PD
(1)'
//猎取图片宽度
PHeight=PD
(2)'
//猎取图片高度
swf"
//猎取Flash宽度
//猎取Flash高度
CaseElse
EndSelect
Setfs=Nothing
SetGetPicSize=Nothing
将上面的代码复制到body的上面就OK了!
当然,有人会说,猎取路径不肯定要用PATH_INFO,挺直用server.mappath()不就可以了嘛,呵呵,萝卜青菜各有所爱,主要是我用PATH_INFO可以实现FSO的一些功能而用server.mappath()没有搞定,所以始终用法这个。
3.定义缩略图尺寸
这部分代码就是仁者见仁,智者见智了。
首先,我们需要规定缩略图显示尺寸范围,譬如:
300X260,代码可以这样写:
DimPXWidth,PXHeight
DimPp'
//Proportion
IfPWidth=0OrPWidth="
Then
PXWidth=0
PXHeight=0
Pp=FormatNumber(PWidth/PHeight,2)'
//长宽比
EndIf
IfPWidth=PHeightThen
IfPWidth=300Then
PXWidth=300
PXHeight=FormatNumber(300/Pp,0)
PXWidth=PWidth
PXHeight=PHeight
IfPHeight=260Then
PXHeight=260
PXWidth=FormatNumber(260*Pp,0)
将上面的代码紧接其次步写下即可。
调用时代码如下:
imgsrc=%=curfilename%border="
width=%=PXWidth%
height=%=PXHeight%
至于图片格式可以用得到,图片尺寸可以写成
response.writePXWidth"
X"
PXHeight
图片大小可以用FSO.GetFileSize(filename)来实现,而点击次数可以简洁地用SQL语句实现,具体编码就不再累述了。
这样,一个无组件生成缩略图程序就写好了,可能有点拿来主义,不过只要大家能将方法把握信任还是有很大提高的。
更多信息请查看IT技术专栏
...