通常我们在制作网站时,对于产品图片、或新闻图片等展示性的图片会遇到因为图片展示位置不同引起的尺寸不同的问题。有些朋友可能讲了,我可以使用img标签的width和height属性!可以使用css来限制!是的,没错,但是我们有没有注意到一个问题,当你上传的图片尺寸小的时候,你要在大的位置显示,图片就会拉的很花。同理,你上传的图片尺寸很大,而位置很小时,图片不但花了,而且下载速度会非常慢。
一般的做法是上传时使用aspjpeg组件自动栽切出需要的几种尺寸,然后分别保存。当然,我还见过要求分别上传大图、小图的低级做法。这样做的缺点很明显,如果网站改版,需求尺寸改变时,图片都要重新栽切一次。并且,当编辑一张图时,要同时替换多个尺寸。
下面,我将我的心得详细解说一下,欢迎交流!
我的方法可以达到以下几个效果:
1、尺寸随意,图片不会强制缩小或放大的很难看;
2、可以随意加水印,并可随时修改;
3、可以防盗链。
原理是,利用URLREWRITE,将图片链接交于ASP处理,在ASP文件中使用ASPJPEG组件,即时处理图片大小,并可执行即时加水印等任务。
具体做法是,在链接图片时,IMG标签的SRC属性使用这样的地址,例如:http://www.azhi.net.cn/photo/T16qFXXddnOtz1upjX_80_80.jpg,然后接助于UrlReWrite技术,将这个地址转为 http://www.azhi.net.cn/picture.asp?p=T16qFXXddnOtz1upjX.jpg&w=80&h=80。那么,Picture.asp文件的具体代码如下: 复制内容到剪贴板
代码:
<%
Dim oJpeg, sWidth, sHeight, sPosW, sPosH, sPath
sPath = Request.QueryString("p")
sWidth = Request.QueryString("w")
sHeight = Request.QueryString("h")
Set oJpeg = Server.CreateObject("Persits.Jpeg") '创建ASPJPEG对像
oJpeg.Open Server.MapPath("/photo/" & sPath) '把文件读出来
If sWidth <> "" Then oJpeg.Width = sWidth '将图片的大小设置为要求的大小
If sHeight <> "" Then oJpeg.Height = sHeight
'---水印操作开始---
oJpeg.Canvas.Font.Color = &HFFFFFF '水印字的颜色
oJpeg.Canvas.Font.Size = 12 '水印字的大小
oJpeg.Canvas.Font.Family = "arial" '水印字的字体
oJpeg.Canvas.Font.Bold = True '水印字是否加粗
sPosW = oJpeg.OriginalWidth '计算水印字的位置坐标
If sWidth <> "" Then sPosW = sWidth
sPosH = oJpeg.OriginalHeight
If sHeight <> "" Then sPosH = sHeight
oJpeg.Canvas.Print sPosW - 58, sPosH - 18, "azhi.net.cn" '写字上去
oJpeg.Canvas.Font.Family = "宋体"
oJpeg.Canvas.Print sPosW - 46, sPosH - 28, "阿智的博客"
'---水印操作结束---
oJpeg.SendBinary '输出处理后的图片
Set oJpeg = Nothing
%>