在做网站的一些功能时,我们需要程序自动调整图片的显示尺寸,下面这两段程序是我以前编写的,用两种不同的手段实现这一功能,一个是用前台的javascript编写,一个是用后台的Asp编写,代码如下:
一、javascript编写的程序:
/*
Code By Tuch Code
Pic is a param of a image's src
ImgID0 is a param of a image's ID
*/
function ResizeImg(ImgID0,Pic){
var Img=new Image();
Img.src=Pic;
var ImgID=document.images[ImgID0];
if(Img){
if(Img.width > 200){
Img.height=Img.height/(Img.width/200);
Img.width=200;
}
if(Img.height > 150){
Img.width=Img.width/(Img.height/150);
Img.height=150;
}
ImgID.width=Img.width;
ImgID.height=Img.height;
}else{
setTimeout(ResizeImg(ImgID0,Pic),500);
}
}
这是处理函数,使用方法如下:
<img name=p1 src=01.gif width=200 height=150>
<script language="javascript">ResizeImg('p1','01.gif')</script>
可以更改 200 150 这两个长宽尺寸,将图片大小限制在其他的长宽尺寸下。
二、Asp编写的程序
处理尺寸的类:
'********************
Code By Tuch Code
'********************
Class DealImgSize
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, clow
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 BinVal(bin)
dim ret,i
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)
dim ret,i
ret = 0
for i = 1 to lenb(bin)
ret = ret *256 + ascb(midb(bin,i,1))
next
BinVal2=ret
End Function
Function getImageSize(filespec)
dim ret(2),bFlag,p1
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 "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
getImageSize=ret
End Function
Function Resize(ow,oh,rw,rh)
dim wh(1)
if cint(ow)>cint(oh) then
if cint(ow)>cint(rw) then
wh(0)=rw
wh(1)=int(oh/(ow/rw))
else
wh(0)=ow
wh(1)=oh
end if
else
if cint(oh)>cint(rh) then
wh(0)=int(ow/(oh/rh))
wh(1)=rh
else
wh(0)=ow
wh(1)=oh
end if
end if
Resize=wh
End Function
End Class
使用方法:
Dim aa
Set aa=new DealImgSize
Dim pw,ph,rpw,rph
pw=aa.getImageSize(Server.MapPath("01.jpg"))(1)
ph=aa.getImageSize(Server.MapPath("01.jpg"))(2)
rpw=aa.Resize(pw,ph,160,120)(0)
rph=aa.Resize(pw,ph,160,120)(1)
Response.Write("<img src=01.jpg width="&rpw&" height="&rph&">")
Set aa=Nothing
160 120 是限制图片显示在这个尺寸比例下,可以根据实际需要修改。
更多的调整图片大小请到论坛查看: http://BBS.TC711.COM
【 双击滚屏 】 【 评论 】 【 收藏 】 【 打印 】 【 关闭 】
来源:
互联网
日期:2007-4-15