利用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的源文件代码,有兴趣的可以研究下。