网上有不少生成缩略图的asp组件。若你的虚拟空间不支持注册新组件,可能会感觉自己的网站失色不少。心晴不才,结合网上资源写了个无组件生成缩略图程序,仅供参考。
还是先看看基础部分吧。首先,我们知道在页面中显示图片是如下代码:
<img src=”pic.gif” border=”0″ width=”300″ height=”260″>
src是图片路径,border控制图片边缘宽度,width是图片的长度,height是图片的高度。缩略图的生成其实就是在原始尺寸上缩放。但一般为了尽量少失真,我们都会按比例缩放。于是,获取图片的长宽尺寸也就成了生成缩略图的重点。
下面便是编写无组件生成缩略图的步骤:
1.无组件获取图片大小
以前刚学asp不久时看到过一篇利用ascii码实现无组件获取图片尺寸的文章。后来试了试,发现在获取jpg类图片尺寸时总是不能正确显示,在网上查了查,居然有不少网站转载这个程序,但没有一家指出此程序的缺陷,也就更谈不上解决缺陷的办法了。后来又google了一下,终于找到了一篇介绍利用adodb.stream获取图片尺寸的文章,按其介绍的方法,修改里面的代码试了试,效果真的还不错,现在将其拿出来与大家分享:
<% private sub class_terminate private function bin2str(bin) private function num2str(num,base,lens) private function str2num(str,base) private function binval(bin) private function binval2(bin) ///以下是调用代码/// 将以上代码复制生成gps.asp文件,这样无组件获取图片尺寸的通用类就ok了。 |
2.获取图片路径
由于不只一张图片,以及图片需分类存放,我们在数据库中设计了一个存放图片相对路径的字段imgurl。我们把上传的图片都放在一个名为images的文件夹中(至于如何无组件上传图片心晴就不在多说了)。现在我们先设计一个showimg.asp页面用来显示缩略图及相关信息。具体设计如下:
图片: 图片格式: 图片尺寸: 图片大小: 点击次数: |
下面,我们获取图片的绝对路径。代码如下:
<% /////图片相对路径(存于数据库中) |
将上面的代码复制到<body>的上面就ok了!
当然,有人会说,获取路径不一定要用path_info,直接用server.mappath()不就可以了嘛,呵呵,萝卜青菜各有所爱,主要是我用path_info可以实现fso的一些功能而用server.mappath()没有搞定,所以一直使用这个。
3.定义缩略图尺寸
这部分代码就是仁者见仁,智者见智了。首先,我们需要规定缩略图显示尺寸范围,譬如:300×260,代码可以这样写:
<%
dim pxwidth,pxheight
dim pp //proportion
if pwidth=0 or pwidth=”” then
pxwidth=0
pxheight=0
else
pp=formatnumber(pwidth/pheight,2) //长宽比
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
%>
将上面的代码紧接第二步写下即可。调用时代码如下:
<img src=<%=curfilename%> border=”0″ width=<%=pxwidth%> height=<%=pxheight%>>
至于图片格式可以用<%=picsuffixname%>得到,图片尺寸可以写成
<%
response.write pxwidth&”x”&pxheight
%>
图片大小可以用fso.getfilesize(filename)来实现,而点击次数可以简单地用sql语句实现,具体编码就不再累述了。
这样,一个无组件生成缩略图程序就写好了,可能有点拿来主义,不过只要大家能将方法掌握相信还是有很大提高的。