最近在做壁纸的项目,会要求根据原图生成不同的分辨率来适配手机。目前设计的方案是只保存一张原图,不同分辨率的图片在请求时根据原图动态裁剪,nginx层实现。
例:
原图url:http://s.qdcdn.com/cl/12526976.jpg
客户端请求的url:http://s.qdcdn.com/cl/12526976,240x400.jpg
则在请求时,服务器nginx层根据原图,动态裁剪出240x400分辨率的图片返回给客户端。
nginx层使用http_image_filter_module模块:
http_image_filter_module是nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息,由于是即时计算的结果,所以网站访问量大的话,不建议使用。
我们的业务访问量也很大,但是用到了cdn,即访问顺序是cdn->nginx->图片服务器,cdn会回源访问nginx,nginx动态生成指定分辨率的图片后,下次用户再访问此分辨率图片时,cdn上已经有了缓存,会大大减少并发动态生成缩略图的访问量。
http_image_filter_module模块的安装请自行网上查阅,本文不再讲述。重点讲下http_image_filter_module生成缩略图的两个命令。