利用Rewrite实现ASP和PHP动态生成缩略图

记得之前曾写过一篇博客,讲的是在IIS官网上看到一个很有用的组件,就是可以动态处理图片的组件,找了下,链接在这里。

Dynamic Image Resizing Module v3

刚看到这个组件,自然想到每次都动态生成缩略图,性能大概是个问题吧。也许是它内部有缓存机制?不过这个确实是不错的工具,可惜需要在服务器上配置,一般的空间不带这个功能的。受此启发,写了个ASP和PHP动态生成缩略图的功能,结合Rewrite效果更好,不过没考虑那么多功能,像什么边框,旋转之类的就没做了。只做了基本的缩放,加上品质参数,缩放类型。ASP的需要Persits.JPEG组件支持,PHP的需要开启GD库。下面是几种常用的伪静态方式,假设文件命名为image.php,放在网站根目录下。(PHP中图片目录是要相对于PHP文件的目录),需要动态生成缩略图的图片存放在upload目录内,仅对jpg和png图片作此处理

 

<!-- IIS7 URL Rewrite Node system.webServer rewrite rules -->
<rule name="ResizeImageRule" stopProcessing="true">
<match url="^(upload/.+?\.(jpg|png))" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^(w|h)\=.+" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="/image.php?img={R:1}" />
</rule>

 

 

# httpd.ini
RewriteRule /(upload/.+?\.(jpg|png))\?((w|h).+) /image.php?img=$1&$3 [N,I]
# .htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{QUERY_STRING} ^(w|h)\=.+
RewriteRule ^(upload/.+?\.(jpg|png)) image.php?img=$1 [NC,L,QSA]

 

 

#参数说明
# img 图片路径,一般相对于网站根目录,php则相对于image.php
# w 最大宽度
# h 最大高度 其中w和h必须至少指定一个
# q 压缩品质 1-100
# m 裁剪方式,不指定时为普通缩放,指定outer时会对图片裁剪以适应宽高

 

大家可根据自己的情况进行测试。

下面是效果图对比

下面压缩包里放了ASP+PHP的源文件代码,有兴趣的可以研究下。

 ASP+PHP动态生成缩略图